383. 赎金信

解题思路

统计magzine字符串中每一个字符串的出现次数,再遍历ransom中每一字母。

STL实现

unorder_map直接利用[]给不存在的key-value赋值是可行的
不存在的key对应的value++先赋值默认值

class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        unordered_map mag;
        
        for(auto iter = magazine.begin();iter!=magazine.end();iter++) {
            mag[*iter] += 1;
        }
        
        for(auto iter = ransomNote.begin();iter!=ransomNote.end();iter++) {
            mag[*iter] -= 1;
            if(mag[*iter]<0)
                return false;
        }
        return true;
    }
};

直接利用简单的hash

本题中只有小写字母,直接hash更加方便
使用STL迭代器在某些情况下会造成性能浪费
magazine[i]判断是否遍历完全

class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        int hash[26]{};
        for(int i = 0;magazine[i];i++) {
            hash[magazine[i]-'a'] ++;
        }
        for(int i = 0;ransomNote[i];i++) {
            if(--hash[ransomNote[i]-'a']<0)
                return false;
        }
        return true;
    }
};

你可能感兴趣的:(383. 赎金信)