面试题


题目:有两个字符串a和b,要求使用b中包含的字符组成a,b中的每个字符只能用一次。


public static boolean canConstruct(String ransomNote, String magazine) {
char[] ran =ransomNote.toCharArray();
char[] man=magazine.toCharArray();
Map<Character,Integer> map= new HashMap<Character, Integer>();
for (int i = 0; i <man.length ; i++) {
if (map.containsKey(man[i])){
map.put(man[i],map.get(man[i])+1);
}else {
map.put(man[i],1);
}
System.out.println(man[i]+":"+map.get(man[i]));
}

for (int i = 0; i <ran.length ; i++) {
if (map.containsKey(ran[i])){
map.put(ran[i],map.get(ran[i])-1);
}else{
return false;
}
if (map.get(ran[i])<0){
return false;
}
}
return true;
}
优化后
public boolean canConstruct2(String ransomNote, String magazine) {
int[] buckets = new int[26];
for(int i = 0; i < magazine.length(); i++) {
buckets[magazine.charAt(i) - 'a']++;
}
for(int i = 0; i < ransomNote.length(); i++) {
if(--buckets[ransomNote.charAt(i) - 'a'] < 0) {
return false;
}
}
return true;
}

posted on 2019-11-16 21:18  大地豆奶  阅读(70)  评论(0编辑  收藏  举报

导航