648. 單詞替換
在英語中,我們有乙個叫做 詞根(root)的概念,它可以跟著其他一些詞組成另乙個較長的單詞——我們稱這個詞為 繼承詞(successor)。例如,詞根an,跟隨著單詞 other(其他),可以形成新的單詞 another(另乙個)。
現在,給定乙個由許多詞根組成的詞典和乙個句子。你需要將句子中的所有繼承詞用詞根替換掉。如果繼承詞有許多可以形成它的詞根,則用最短的詞根替換它。
你需要輸出替換之後的句子。
示例:輸入:dict(詞典) = [「cat」, 「bat」, 「rat」] sentence(句子) = 「the cattle was rattled by the battery」
輸出:「the cat was rat by the bat」
輸入只包含小寫字母。
1 <= dict.length <= 1000
1 <= dict[i].length <= 100
1 <= 句中詞語數 <= 1000
1 <= 句中詞語長度 <= 1000
建立乙個字典樹,通過迴圈插入每乙個單詞,以最後一 # 結尾
對句子中的單詞以空格進行拆分
對每乙個單詞進行檢視是否有詞根
對單詞中的每乙個字元進行迴圈,如果字元在字典中就加入待替換的re_word
如果單詞中的字元不在字典中的時候,我們就要彈出迴圈
彈出迴圈之後我們需要判斷是否是已經找到截至的 # ,即是否已經找完乙個字典後還有部分沒有找到,比字典短,所以就算只能保持原始的單詞字元 ,不能替換成為詞根。
在迴圈的過程中,如果我們找到了乙個 #,說明字典已經結束,單詞比字典長,可以使用詞根來替換,於是我們進行替換,然後將字典樹在深入一步,彈出迴圈。
還有一種情況就是部分字首相同,但是某乙個字元和字典中的不一致,這個時候也需要彈出迴圈。這個時候肯定沒有找到字典的結尾#,所以只能保留原始的字元,說明不匹配。
class
solution
:def
replacewords
(self,
dict
: list[
str]
, sentence:
str)
->
str:
self.tree =
definsert
(word)
:#插入乙個word
tree = self.tree
n =len(word)
for c in word:
if c not
in tree:
tree[c]
= tree = tree[c]
tree[
'#']
='#'
#結尾建立標誌
for word in
dict
:#將所有的單詞都建立乙個整體的字典樹
insert(word)
# print(self.tree)
words = sentence.split(
' ')
#分割句子中的單詞
res =
for word in words:
tree = self.tree
re_word =
''for c in word:
#尋找字典樹
if c in tree:
re_word += c
tree = tree[c]
if'#'
in tree:
#單詞比字典長,找到字典的結尾,進行替換,深入一步字典,然後彈出
tree = tree[
'#']
break
else
:#部分字首相同,但是不匹配,不是詞根,沒能找到 #
break
if'#'
notin tree:
#沒有能夠匹配上,或者單詞比字典短,沒能匹配上詞根,保持原狀
return
' '.join(res)
648 單詞替換(使用字首樹實現)
構建字首樹 字首樹 class trie 構建字首樹 param word public void insert string word node node.get curchar node.setend 判斷word是否為字首 param word return public boolean st...
1962 單詞替換
時間限制 1 sec 記憶體限制 32 mb 提交 406 解決 138 提交 狀態 討論版 命題人 外部匯入 輸入乙個字串,以回車結束 字串長度 100 該字串由若干個單詞組成,單詞之間用乙個空格隔開,所有單詞區分大小寫。現需要將其中的某個單詞替換成另乙個單詞,並輸出替換之後的字串。多組資料。每組...
177 單詞替換
題目描述 你需要輸出替換之後的句子。示例 1 輸入 dict 詞典 cat bat rat sentence 句子 the cattle was rattled by the battery 輸出 the cat was rat by the bat 注 輸入只包含小寫字母。1 字典單詞數 1000...