问题:
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。
解法:
class Solution { public: bool canConstruct(string ransomNote, string magazine) { if(ransomNote.size()>magazine.size()) { return false; } vector<int> cnt(26); for(auto &c:magazine) { cnt[c-'a']++; } for(auto &c: ransomNote) { cnt[c-'a']--; if( cnt[c-'a']<0) { return false; } } return true; } };
核心思想:
用数组中的个元素一一映射26个字母,对数组进行++和--操作来代替写入和取出操作