📜  门| GATE-CS-2001 |问题 25(1)

📅  最后修改于: 2023-12-03 15:28:41.245000             🧑  作者: Mango

GATE-CS-2001 Question 25

该问题要求我们实现一个函数,该函数接受一个句子和一个单词作为参数,然后输出句子中出现该单词的最小距离。如果单词没有在句子中出现,则输出 -1。

Input

函数接受两个参数:一个字符串类型的句子 sentence,和一个字符串类型的单词 word

Output

函数将输出一个整数类型的值 distance,表示单词在句子中出现的最短距离。如果单词没有在句子中出现,则输出 -1。

Example
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
Approach

我们可以将句子分成单词,然后在单词列表中查找目标单词,并记录其出现的位置,最后计算出它们之间的最小值。

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() 方法返回最小值。

Complexity Analysis

时间复杂度:该算法需要对句子进行拆分并查找目标单词的所有位置,需要 $\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)$。