给你两个字符串:ransomNote
和 magazine
,判断 ransomNote
能不能由 magazine
里面的字符构成。
如果可以,返回 true
;否则返回 false
。
magazine
中的每个字符只能在 ransomNote
中使用一次。
思路:使用unordered_map
容器统计magazine
的字符频率,再遍历ransomNote
中的每个字符判断字符频率是否与magazine
一致
代码:
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
//创建unordered_map存放每个字符的数量
unordered_map<char, int> charCout;
// 统计 magazine 中每个字符的数量
for(char c: magazine){
charCout[c]++;
}
// 检查 ransomNote 中的每个字符是否能在 magazine 中找到
for(char c: ransomNote){
if(charCout[c] == 0)
return false;//找不到或字符用完false
charCout[c]--;//找到了字符频率减一
}
return true;
}
};
关联容器为什么选unordered_map
?
unordered_map
包含键值对且不允许关键字重复,便于统计每个字符及其对应频率。- 题目需要频繁查找和更新字符频率,
unordered_map
按照hash函数映射的方式组织元素,更符合需求。 - 由于问题本身不关心字符顺序,
unordered_map
的无序性正好符合需求。