leetcode383_赎金信


一、题目

二、题目分析

这个其实跟之前那道四数之和的题目很相似,我们只需要使用一个map来记录其中一个字符串的字母以及它出现的次数,然后对于另外字符串,去遍历就好了。

因为最理想的情况是,赎金信上面的字符串需要是杂志上的字符串的子集,所以这个时候我采取的方式是遍历杂志的字符串的数目,然后再对赎金信上的做一个查询,这样就可以得到最后的一个结果,如果每个字符的数目都不小于0,那么返回true,否则返回false。

三、代码

class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        //可以先设置一个unordered_map,记录magazine里面出现的字母与次数
        //然后对ransomNote里面进行遍历
        //如果最后没有小于0的,那么就可以
        int magazineLength = magazine.length();
        //初始化map
        unordered_map<char, int> map;
        for(int i=0; i){
            map[magazine[i]]++;
        }
        //遍历
        int ransomNoteLength = ransomNote.length();
        for(int i=0; i){
            //如果找到
            if(map.find(ransomNote[i])!=map.end()){
                map[ransomNote[i]]--;
                if(map[ransomNote[i]]<0)
                    return false;
            }
            else
                return false;
        }
        return true;
    }
};