leetcode 383赎金信
给你两个字符串: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的无序性正好符合需求。
浙公网安备 33010602011771号