leetcode 648 單詞替換

2021-10-08 18:53:23 字數 2016 閱讀 7535

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...