题目
类型:哈希表
解题思路
核心点:只需要满足字符串 magazine 中的每个英文字母的统计次数都大于等于 ransomNote 中相同字母的统计次数即可。
1、如果字符串magazine 的长度小于字符串 ransomNote 的长度,则可以肯定 magazine 无法构成 ransomNote,此时直接返回 false。
2、首先统计 magazine 中每个英文字母的次数 cnt[],再遍历统计 ransomNote 中每个英文字母的次数,如果发现 ransomNote 中存在某个英文字母的统计次数大于 magazine 中该字母统计次数cnt[],则此时直接返回 false。
代码
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;
}
}