📅  最后修改于: 2023-12-03 15:28:41.245000             🧑  作者: Mango
该问题要求我们实现一个函数,该函数接受一个句子和一个单词作为参数,然后输出句子中出现该单词的最小距离。如果单词没有在句子中出现,则输出 -1。
函数接受两个参数:一个字符串类型的句子 sentence
,和一个字符串类型的单词 word
。
函数将输出一个整数类型的值 distance
,表示单词在句子中出现的最短距离。如果单词没有在句子中出现,则输出 -1。
sentence = "the quick brown fox jumps over the lazy dog"
word = "the"
print(find_minimum_distance(sentence, word)) # 0
sentence = "the quick brown fox jumps over the lazy dog"
word = "dog"
print(find_minimum_distance(sentence, word)) # 6
sentence = "the quick brown fox jumps over the lazy dog"
word = "cat"
print(find_minimum_distance(sentence, word)) # -1
我们可以将句子分成单词,然后在单词列表中查找目标单词,并记录其出现的位置,最后计算出它们之间的最小值。
def find_minimum_distance(sentence: str, word: str) -> int:
words = sentence.split()
indices = [i for i in range(len(words)) if words[i] == word]
if not indices:
return -1
return min([b - a for a, b in zip(indices, indices[1:])])
我们首先使用 split()
方法将句子分解成单词列表,并使用列表解析式查找目标单词的所有位置。如果找不到目标单词,则返回 -1。否则,使用列表解析式计算每对连续位置的差值,然后使用 min()
方法返回最小值。
时间复杂度:该算法需要对句子进行拆分并查找目标单词的所有位置,需要 $\mathcal{O}(n)$ 时间复杂度,其中 $n$ 是句子中的单词数。确定出现单词的位置需要 $\mathcal{O}(m)$ 时间复杂度,其中 $m$ 是目标单词的出现次数。计算最小距离需要 $\mathcal{O}(m)$ 时间复杂度。因此,该算法的时间复杂度为 $\mathcal{O}(n + m)$。
空间复杂度:存储单词列表需要 $\mathcal{O}(n)$ 的空间,存储目标单词的位置需要 $\mathcal{O}(m)$ 的空间。因此,该算法的空间复杂度为 $\mathcal{O}(n + m)$。