class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
//思路:建立一个map表,将magazined的值放到key里,values存放这个元素的数目
//遍历ransomNote,找到一个就values减一,找不到就返回false
HashMap<Character,Integer> map = new HashMap<>();
for(char m:magazine.toCharArray()){
map.put(m,map.getOrDefault(m,0)+1);
}
for(char r:ransomNote.toCharArray()){
if(map.containsKey(r)&&map.get(r)>=1){
map.put(r,map.get(r)-1);
}
else{
return false;
}
}
return true;
}
}
其实在本题的情况下,使用map的空间消耗要比数组大一些的,因为map要维护红黑树或者哈希表,而且还要做哈希函数,是费时的!数据量大的话就能体现出来差别了。 所以数组更加简单直接有效!
数组的思路是,建立一个26个元素的数组,每个字母的位置是固定的,统计字母个数。
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
if (ransomNote.length() > magazine.length()) {
return false;
}
int[] cnt = new int[26];
for (char c : magazine.toCharArray()) {
cnt[c - 'a']++;
}
for (char c : ransomNote.toCharArray()) {
cnt[c - 'a']--;
if(cnt[c - 'a'] < 0) {
return false;
}
}
return true;
}
}
作者:力扣官方题解
链接:https://leetcode.cn/problems/ransom-note/solutions/1135839/shu-jin-xin-by-leetcode-solution-ji8a/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。