4 回答
TA贡献1895条经验 获得超3个赞
这可能是因为当您检索一本杂志时,您不是减少杂志中的单词计数,而是完全删除该单词的所有计数。尝试这个:
for(String word: note){
if(!(wordMap.containsKey(word) && wordMap.get(word) > 0)){
flag = 0;
break;
}
else wordMap.put(word, wordMap.get(word)-1);
}
TA贡献1802条经验 获得超4个赞
wordMap是一个频率表并给出字数。但是,对于注释中的每个单词,您必须减少字数,而不是完全删除该条目。只有当字数达到 0 时才能删除该条目。
另一个问题是区分大小写。根据要求,您可能需要将所有单词转换为小写。
else {
wordMap.computeIfPresent(word, (k, v) -> v <= 1? null : v - 1);
}
这会检查旧值是否v大于 1,然后减小它,否则返回空值,表示删除该条目。
可以进行频率计数:
Map<String, Integer> wordMap = new HashMap<>();
for(String word: magazine) {
wordMap.merge(word, 1, Integer::sum);
}
TA贡献1818条经验 获得超7个赞
我认为,这个实现更简单
static boolean checkMagazine(String[] magazine, String[] note) {
List<String> magazineCopy = new ArrayList<>(Arrays.asList(magazine));
for (String word : note)
{
if (magazineCopy.contains(word)) {
magazineCopy.remove(word);
continue;
}
return false;
}
return true;
}
我想你的错误在这里:
else wordMap.remove(word, wordMap.get(word));
您正在从地图中删除该单词,而不是减少此类单词的数量,并且只有当数量达到 0 时,您才应该从地图中删除该单词。
TA贡献1827条经验 获得超9个赞
Python解决方案
def checkMagazine(magazine, ransom):
magazine.sort()
ransom.sort()
for word in ransom:
if word not in magazine:
flag = False
break
else:
magazine.remove(word)
flag = True
if (flag):
print("Yes")
else:
print("No")
添加回答
举报