我对以下所述的问题的解决方案有疑问-
给出一个任意的赎金票据字符串和另一个包含所有杂志字母的字符串,编写一个函数,如果可以从杂志中构造赎金票据,则该函数将返回true;否则,它将返回false。
杂志字符串中的每个字母在赎金记录中只能使用一次。根据问题,Strings [“ aa”,“ ab”]应该返回false,strings [“ aa”,“ aab”]应该返回true。
这里是我首先尝试的代码,但没有得到如上所述的必需输出。
unordered_map<char,int>umap;
for(char m:magazine)
{
umap[m]++;
}
for(char r:ransomNote)
{
if(umap.count(r)<=1)
{
return false;
}
else{
umap[r]--;
}
}
return true;
}
在上面的代码中,如果没有密钥存在,我已经使用umap.count(r)<=1
返回false。对于字符串[“ aa”,“ aab”],它返回true,但是对于字符串[“ aa”,“ ab”],它也返回true,但它应该返回false。然后,我使用了另一种方法来解决此问题,方法是仅使用umap[r]<=0
代替umap.count(r)<=1
,它可以正常工作,否则所有代码都相同。
bool canConstruct(string ransomNote, string magazine) {
unordered_map<char,int>umap;
for(char m:magazine)
{
umap[m]++;
}
for(char r:ransomNote)
{
if(umap[r]<=0)
{
return false;
}
else{
umap[r]--;
}
}
return true;
}
我无法获得我在第一个代码的if条件中所缺少的内容。谁能帮助我说一下我在第一个代码中做错了什么。任何帮助表示赞赏。
[unordered_map::count
返回具有指定键的项目数。