您的位置:首页 > 其它

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

2015-09-09 14:08 211 查看
如题

样例

给出 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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: