给你两个字符串: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" 输
class Solution {
public:
bool canConstruct(string ransomNote, string magazine)
{
int n1=ransomNote.size(),n2=magazine.size();
unordered_map<char,int> um;
for(int i=0;i<n2;++i)
{
um[magazine[i]]++;
}
for(int i=0;i<n1;++i)
{
if(um.find(ransomNote[i])!=um.end()&&um[ransomNote[i]]>1)
{
um[ransomNote[i]]--;
}
else if(um.find(ransomNote[i])!=um.end()&&um[ransomNote[i]]==1)
{
um[ransomNote[i]]--;
um.erase(ransomNote[i]);
}
else if(um.find(ransomNote[i])==um.end())
{
return false;
}
}
return true;
}
};
出:true