383. 赎金信
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
示例 1:
输入:ransomNote = “a”, magazine = “b”
输出:false
示例 2:
输入:ransomNote = “aa”, magazine = “ab”
输出:false
示例 3:
输入:ransomNote = “aa”, magazine = “aab”
输出:true
提示:
1 <= ransomNote.length, magazine.length <= 105
ransomNote 和 magazine 由小写英文字母组成
解题思路
hash表存储在magazine中的每个字符的个数,在ransomNote中减去每个字符的个数,如果当前的字符在下一次出现前就已经为零了,那么直接返回false,否则为true
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
unordered_map<char,int> mp;
int n=ransomNote.length();
int m=magazine.length();
if(n>m) return false;
for(int i=0;i<m;i++) mp[magazine[i]]++;
for(int i=0;i<n;i++){
if(mp[ransomNote[i]]==0){
return false;
}
mp[ransomNote[i]]--;
}
return true;
}
};