[LintCode]判断一个字符串是否包含另一个字符串的所有字符

问题描述:

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

样例

给出 A = "ABCD" B = "ACD",返回 true

给出 A = "ABCD" B = "AABC", 返回 false

注意事项

在 A 中出现的 B 字符串里的字符不需要连续或者有序。

问题分析:

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

问题解决:

一种比较麻烦的解法:

public class Solution {
/**
* @param A : A string includes Upper Case letters
* @param B : A string includes Upper Case letter
* @return : if string A contains all of the characters in B return true else return false
*/
public boolean compareStrings(String A, String B) {
// write your code here
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++) {
String key = A.charAt(i) + "";
Integer count = map.get(key);
map.put(key, ++count);
}
for (int i = 0; i < B.length(); i++) {
String key = B.charAt(i) + "";
Integer count = map.get(key);
if (map.containsKey(key)) {
map.put(key, --count);
}
if (count < 0) {
return false;
}
}
return true;
}
}

一种简单的解法(本质一样):

public class Solution {
/**
* @param A : A string includes Upper Case letters
* @param B : A string includes Upper Case letter
* @return : if string A contains all of the characters in B return true else return false
*/
public 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;
}
}
上一篇:CSU 1023 修路(二分+模拟)


下一篇:mysql如何判断一个字符串是否包含另外一个字符串?