leetcode 383赎金信

给你两个字符串:ransomNote 和 magazine ,判断 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 的无序性正好符合需求。
posted @ 2024-08-16 12:12  紫冰凌  阅读(13)  评论(0)    收藏  举报