如题
样例
给出 A = "ABCD"
B = "ACD"
,返回 true
给出 A = "ABCD"
B = "AABC"
, 返回 false
注意
在 A 中出现的 B 字符串里的字符不需要连续或者有序。
目前思路是分别扫描两个字符串得到两个map<Character,Integer> 比较字母出现次数,若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<Character,Integer> map1=new HashMap<>();
Map<Character,Integer> map2=new HashMap<>();
char[] word1=A.toCharArray();
char[] word2=B.toCharArray();
for(char c:word1){
if(map1.containsKey(c)){
int val=map1.get(c);
map1.put(c,++val);
}
else{
map1.put(c,1);
}
}
for(char c:word2){
if(map2.containsKey(c)){
int val=map2.get(c);
map2.put(c,++val);
}
else{
map2.put(c,1);
}
}
boolean has=true;
for(Map.Entry<Character,Integer> entry:map2.entrySet()){
if(map1.containsKey(entry.getKey())){
if(map1.get(entry.getKey())>=(entry.getValue())){ //这一行第一次跑的时候就错在了这里,当时使用了equals,其实要考虑多的情况
continue;
}else{
has=false;
break;
}
}else{
has=false;
break;
}
}
return has;
}
}