最常見的單詞

2021-10-05 12:34:25 字數 1784 閱讀 4442

題目描述:

給定乙個段落 (paragraph) 和乙個禁用單詞列表 (banned)。返回出現次數最多,同時不在禁用列表中的單詞。

題目保證至少有乙個詞不在禁用列表中,而且答案唯一。

禁用列表中的單詞用小寫字母表示,不含標點符號。段落中的單詞不區分大小寫。答案都是小寫字母。

示例:

輸入: paragraph = 「bob hit a ball, the hit ball flew far after it was

hit.」 banned = [「hit」] 輸出: 「ball」 解釋: 「hit」 出現了3次,但它是乙個禁用的單詞。

「ball」 出現了2次 (同時沒有其他單詞出現2次),所以它是段落裡出現次數最多的,且不在禁用列表中的單詞。

注意,所有這些單詞在段落裡不區分大小寫,標點符號需要忽略(即使是緊挨著單詞也忽略, 比如 「ball,」),

"hit"不是最終的答案,雖然它出現次數更多,但它在禁用單詞列表中。

思路:

思路: 利用 hashmap 實現
這個題目看似簡單, 實則有很多坑:

1. 段落中大小寫字母都有, 但 banned 中只有小寫字母

2. 段落中單詞的間隔不僅僅有空格, 還有標點符號, 這樣就不能直接根據 string 型別存入 hashmap 中

解決方法:

1. 先把 banned 存入乙個 hashset 中, 以便於判斷

2. 逐個字元遍歷整個段落, 如果遇到標點符號, 就把之前遍歷的字母轉小寫作為乙個單詞

3. 判斷這個單詞是否在 hashset 中存在, 如果不存在, 就存到 hashmap 中

4. 把每個單詞的 key 和 value 值記錄下來, 並不斷更新, 儲存最大值, 最後返回記錄最大值的單詞即可

**實現:

public string mostcommonword

(string paragraph, string[

] banned)

hashmap

map =

newhashmap

<

>()

; string result =

" ";

// 用於存放更新最大值的單詞

int max =0;

// 用於存放更新單詞的 value

stringbuilder word =

newstringbuilder()

;// 用於存放遍歷 paragraph 得到的每個單詞

paragraph +=

".";

// 處理 paragraph 中的最後乙個單詞

for(

char c : paragraph.

tochararray()

)else

if(word.

length()

>0)

}// 這裡已經處理完 word 裡存的這個單詞了, 需要更新 word 記錄 paragraph 中的下乙個單詞

word =

newstringbuilder()

;}}// 這裡 result 中存的就是 map 中 value 最大的元素

return result;

}

819 最常見的單詞

給定乙個段落 paragraph 和乙個禁用單詞列表 banned 返回出現次數最多,同時不在禁用列表中的單詞。題目保證至少有乙個詞不在禁用列表中,而且答案唯一。禁用列表中的單詞用小寫字母表示,不含標點符號。段落中的單詞不區分大小寫。答案都是小寫字母。示例 輸入 paragraph bob hit ...

leetcode 最常見的單詞

題目 給定乙個段落 paragraph 和乙個禁用單詞列表 banned 返回出現次數最多,同時不在禁用列表中的單詞。題目保證至少有乙個詞不在禁用列表中,而且答案唯一。禁用列表中的單詞用小寫字母表示,不含標點符號。段落中的單詞不區分大小寫。答案都是小寫字母。輸入 paragraph bob hit ...

Leetcode 819 最常見的單詞

給定乙個段落 paragraph 和乙個禁用單詞列表 banned 返回出現次數最多,同時不在禁用列表中的單詞。題目保證至少有乙個詞不在禁用列表中,而且答案唯一。禁用列表中的單詞用小寫字母表示,不含標點符號。段落中的單詞不區分大小寫。答案都是小寫字母。示例 輸入 paragraph bob hit ...