給你兩個字串: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
的無序性正好符合需求。