在英语中,有一个叫做 词根(root) 的概念,它可以跟着其他一些词组成另一个较长的单词——我们称这个词为 继承词(successor)。例如,词根an,跟随着单词 other(其他),可以形成新的单词 another(另一个)。
现在,给定一个由许多词根组成的词典和一个句子,需要将句子中的所有继承词用词根替换掉。如果继承词有许多可以形成它的词根,则用最短的词根替换它。
需要输出替换之后的句子。
示例 1:
输入:dictionary = ["cat","bat","rat"], sentence = "the cattle was rattled by the battery"
输出:"the cat was rat by the bat"
示例 2:
输入:dictionary = ["a","b","c"], sentence = "aadsfasf absbs bbab cadsfafs"
输出:"a a b c"
示例 3:
输入:dictionary = ["a", "aa", "aaa", "aaaa"], sentence = "a aa a aaaa aaa aaa aaa aaaaaa bbb baba ababa"
输出:"a a a a a a a a bbb baba a"
示例 4:
输入:dictionary = ["catt","cat","bat","rat"], sentence = "the cattle was rattled by the battery"
输出:"the cat was rat by the bat"
示例 5:
输入:dictionary = ["ac","ab"], sentence = "it is abnormal that this solution is accepted"
输出:"it is ab that this solution is ac"
class Solution:
def replaceWords(self, dictionary: List[str], sentence: str) -> str:
# 方法一 遍历
# dictionary_set = set(dictionary)
# word_list = sentence.split(" ")
# for i in range(len(word_list)):
# for j in range(1, len(word_list[i])+1):
# if word_list[i][:j] in dictionary_set:
# word_list[i] = word_list[i][:j]
# break
# return " ".join(word_list)
# 方法二 字典树
trie = {}
for word in dictionary:
cur = trie
for c in word:
if c not in cur:
cur[c] = {}
cur = cur[c]
cur['#'] = {}
print(dictionary)
print(trie)
words = sentence.split(" ")
for i, word in enumerate(words):
cur = trie
for j, c in enumerate(word):
if "#" in cur:
words[i] = word[:j]
break
if c not in cur:
break
cur = cur[c]
return " ".join(words)
剑指 Offer(专项突击版)- 剑指 Offer II 063. 替换单词(20220809)
最新推荐文章于 2024-10-05 12:29:44 发布