leetcode 383贖金信

紫冰凌發表於2024-08-16

給你兩個字串:ransomNotemagazine ,判斷 ransomNote 能不能由 magazine 裡面的字元構成。

如果可以,返回 true ;否則返回 false

magazine 中的每個字元只能在 ransomNote 中使用一次。

image.png
思路:使用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?

  1. unordered_map包含鍵值對且不允許關鍵字重複,便於統計每個字元及其對應頻率。
  2. 題目需要頻繁查詢和更新字元頻率,unordered_map按照hash函式對映的方式組織元素,更符合需求。
  3. 由於問題本身不關心字元順序,unordered_map 的無序性正好符合需求。

相關文章