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")
添加回答
舉報