У меня есть сомнение в решении этого вопроса, который сформулирован ниже -
Учитывая произвольную строку примечания с требованием выкупа и другую строку, содержащую буквы из всех журналов, напишите функцию, которая будет возвращать true, если выкуп заметка может быть построена из журналов; в противном случае он вернет false.
Каждая буква в строке журнала может использоваться только один раз в вашей записке с требованием выкупа. Строки ["aa", "ab"] должны возвращать false, а строки ["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 первого кода. Может кто-нибудь помочь мне заявить, что я делаю неправильно в первом коде. Любая помощь приветствуется.