题目
思路
1.这道题最直接的想法就是我们用一个HashMap来统计magazine里每个字符出现的次数,其中key是字符,value是该字符出现的次数。然后再依次遍历ransomNote里的每个字符,如果在HashMap里找不到该字符,或者能找到,但是value<=0,那么就要返回false了。反之则继续遍历。
2.这道题里说了ransomNote和magazine都是由小写字母组成。相比HashMap(底层是哈希表),数组哈希空间占有更小,运行会更有效率。所以我们用数组哈希来做。
代码
//HashMap
import java.util.HashMap;
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
HashMap<Character, Integer> map = new HashMap<>();
char[] r = ransomNote.toCharArray();
char[] m = magazine.toCharArray();
for (char c : m) {
if (map.containsKey(c)) {
int value = map.get(c);
map.put(c, value + 1);
} else {
map.put(c, 1);
}
}
for (char c : r) {
if (map.containsKey(c) && map.get(c) > 0) {
int value = map.get(c);
map.put(c, value - 1);
} else {
return false;
}
}
return true;
}
}
//leetcode submit region end(Prohibit modification and deletion)
//哈希数组
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
int[] res = new int[26];
for (char c : magazine.toCharArray()) {
res[c - 'a']++;
}
for (char c : ransomNote.toCharArray()) {
res[c - 'a']--;
}
for (int i : res) {
if (i < 0) {
return false;
}
}
return true;
}
}
//leetcode submit region end(Prohibit modification and deletion)