L1-比较字符串

比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母

样例

给出 A = “ABCD” B = “ACD”,返回 true

给出 A = “ABCD” B = “AABC”, 返回 false

法一

比较B字符串在A中出现的次数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

public class Solution {
/**
* @param matrix
* : matrix, a list of lists of integers
* @param target
* : An integer
* @return: a boolean, indicate whether matrix contains target
*/
public static boolean compareStrings(String A, String B) {
// write your code here
int count = 0;
StringBuilder sb = new StringBuilder(A);
for (int i = 0; i < B.length(); i++) {
for (int j = 0; j < sb.length(); j++) {
if (B.charAt(i) == sb.charAt(j)) {
count++;
sb.setCharAt(j, '0');
break;
}
}
}
if (count == B.length())
return true;
else
return false;
}
public static void main(String[] args) {
String s1 = "ABCD", s2 = "ACC";
if (compareStrings(s1, s2) == true)
System.out.println("true");
}
}

法二

定义一个大小为26的数组(因为大写字母有26个),遍历字符串A,将字符串A中出现的字符记录到数组中,出现一次加1;遍历字符串B,将出现的字符记录到数组中,出现一次减1。如果字符串B中的字符位置的数组大小小于0则字符串B不包含于字符串A。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Solution {
/**
* @param A: A string
* @param B: A string
* @return: if string A contains all of the characters in B return true else return false
*/
public static boolean compareStrings(String A, String B) {
// write your code here
int [] index=new int[26];
for(int i=0;i<A.length();i++)
index[A.charAt(i)-'A']++;
for(int i=0;i<B.length();i++)
{index[B.charAt(i)-'A']--;
if(index[B.charAt(i)-'A']<0) return false;}
return true;
}
}

实质上利用的是哈希表的思想。只有大写字母,一共26个,遍历A的时候,往里面压,遍历B的时候,往外边弹,如果不够弹,则不包含

hashmap实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.util.*;

public class Solution {
/**
* @param matrix
* : matrix, a list of lists of integers
* @param target
* : An integer
* @return: a boolean, indicate whether matrix contains target
*/
public static boolean compareStrings(String A, String B) {
Map<String, Integer> map = new HashMap<String, Integer>();
for(int i=0;i<26;i++)
map.put((char)(i+'A')+"", 0);
for(int i=0;i<A.length();i++)
{
int count=map.get(A.charAt(i)+"");
map.put(A.charAt(i)+"", count++);
}
for(int j=0;j<B.length();j++)
{
String key=B.charAt(j)+"";
int integer=map.get(key);
if(map.containsKey(key))
{
map.put(key, --integer);
}
if(integer<0) return false;

}

return true;
}
public static void main(String[] args) {
String s1 = "ABCD", s2 = "ACC";
if (compareStrings(s1, s2) == true)
System.out.println("true");
}
}

参考博客

关于hashmap https://www.cnblogs.com/lchzls/p/6714474.html

其他思路
https://blog.csdn.net/u012664191/article/details/76060513
https://blog.csdn.net/ivanmerlin/article/details/48315349