コンテンツ
1.トピックの説明
段落(段落)と禁止された単語のリスト(禁止)が与えられます。禁止リストに含まれていないときに出現回数が最も多い単語を返します。
質問は、少なくとも1つの単語が禁止リストに含まれておらず、答えが一意であることを確認します。禁止リスト内の単語は、句読点なしで小文字で書かれています。段落内の単語では大文字と小文字は区別されません。答えはすべて小文字です。
例:
入力: paragraph = "ボブがボールを打った、ヒットしたBALLは打たれた後ずっと飛んだ。" banned = ["hit"]出力: "ball" 説明: "hit"は3回発生しますが、禁止された単語です。 「ボール」は2回出現するため(他の単語は2回出現しません)、禁止リストに含まれていない段落で最も頻繁に使用される単語です。 これらの単語はすべて段落で大文字と小文字を区別しないことに注意してください。句読点は無視する必要があります(「ball」などの単語の横でも)。 「hit」は最終的な答えではありませんが、頻繁に発生します。禁止されている単語のリストにあります。 。
ヒント:
1 <= 段落长度 <= 1000
0 <= 禁用单词个数 <= 100
1 <= 禁用单词长度 <= 10
- 回答は一意であり、すべて小文字です(大文字
paragraph
になっている場合でも、特定の名詞の場合でも、回答はすべて小文字です)。 paragraph
文字、スペース、および次の句読点のみが含まれます!?',;.
- ハイフンの有無にかかわらず単語はありません。
- 単語には文字のみが含まれ、省略記号やその他の句読点は含まれません。
出典:LeetCode
リンク:https ://leetcode-cn.com/problems/most-common-word
著作権はLeetCode.comに帰属します。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。
2.問題解決分析
- まず、すべての文字を均一に小文字に変換します。
- 次に、各単語をスペースとコンマで区切り、禁止リストに存在するかどうかを判断します
- はいの場合、スキップします
- そうでない場合、対応するカウンターは1つインクリメントされます
ハッシュテーブルは、各単語のカウンターを維持するために使用されます。
Pythonでは、文字列メソッドstr.split()を単語のセグメンテーションに使用できますが、段落内に句読点があり、クリーンアップする必要がある場合もあります。これらの句読点を最初にスペースに置き換えてから、スペースに基づいて単語を区切り文字として分割することを検討してください。
3.コードの実装
from typing import List
class Solution:
def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
para = paragraph.lower()
for c in ["!", ";", "'", "?", ".", ","]:
para = para.replace(c, " ")
print(para)
wlist = para.split()
print(wlist)
cnts = dict()
for w in wlist:
if w not in banned:
if w not in cnts:
cnts[w] = 1
else:
cnts[w] = cnts[w] + 1
print(cnts)
maxcnt = 0
for key in cnts:
if cnts[key] > maxcnt:
maxcnt = cnts[key]
maxword = key
return maxword
if __name__ == "__main__":
import time
sln = Solution()
# paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."
# banned = ["hit"]
# print(sln.mostCommonWord(paragraph, banned))
# paragraph = "Bob. hIt, baLl"
# banned = ["bob", "hit"]
# print(sln.mostCommonWord(paragraph, banned))
paragraph = "L, P! X! C; u! P? w! P. G, S? l? X? D. w? m? f? v, x? i. z; x' m! U' M! j? V; l. S! j? r, K. O? k? p? p, H! t! z' X! v. u; F, h; s? X? K. y, Y! L; q! y? j, o? D' y? F' Z; E? W; W' W! n! p' U. N; w? V' y! Q; J, o! T? g? o! N' M? X? w! V. w? o' k. W. y, k; o' m! r; i, n. k, w; U? S? t; O' g' z. V. N? z, W? j! m? W! h; t! V' T! Z? R' w, w? y? y; O' w; r? q. G, V. x? n, Y; Q. s? S. G. f, s! U? l. o! i. L; Z' X! u. y, Q. q; Q, D; V. m. q. s? Y, U; p? u! q? h? O. W' y? Z! x! r. E, R, r' X' V, b. z, x! Q; y, g' j; j. q; W; v' X! J' H? i' o? n, Y. X! x? h? u; T? l! o? z. K' z' s; L? p? V' r. L? Y; V! V' S. t? Z' T' Y. s? i? Y! G? r; Y; T! h! K; M. k. U; A! V? R? C' x! X. M; z' V! w. N. T? Y' w? n, Z, Z? Y' R; V' f; V' I; t? X? Z; l? R, Q! Z. R. R, O. S! w; p' T. u? U! n, V, M. p? Q, O? q' t. B, k. u. H' T; T? S; Y! S! i? q! K' z' S! v; L. x; q; W? m? y, Z! x. y. j? N' R' I? r? V! Z; s, O? s; V, I, e? U' w! T? T! u; U! e? w? z; t! C! z? U, p' p! r. x; U! Z; u! j; T! X! N' F? n! P' t, X. s; q'"
banned = ["m","i","s","w","y","d","q","l","a","p","n","t","u","b","o","e","f","g","c","x"]
print(sln.mostCommonWord(paragraph, banned))
実行時間:36ミリ秒、すべてのPython3コミットでユーザーの82.16%を上回った
メモリ消費量:15.2 MB、すべてのPython3コミットでユーザーの7.89%を上回っています
簡単な質問ですが、成功する前に3回提出されました。詳細は成功または失敗を決定します。。。
文字列メソッドsplit()が原因で、最初のコミットが失敗しました。str.split()とstr.split(“”)に注意してください。一般に、後者を使用するのは不必要で面倒です。
タイトルリクエストの段落の句読点の「;」が誤って「:」と読み取られたため、2番目の送信は失敗しました。。。古い目はめまいがする^-^
メインディレクトリに戻る:Leetcodeの毎日の問題解決ノート(動的更新...)