有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次,而每次寻找的单词不同,你能对此优化吗?
示例:
输入:words = ["I","am","a","student","from","a","university","in","a","city"], word1 = "a", word2 = "student"
输出:1
提示:
words.length <= 100000
一、双指针
在一个for循环里遍历word里每一个词,每遇到word1或者word2时,如果当前词与i的词不同就做差求距离,然后将i指向当前j的位置,然后继续向前遍历。
class Solution:
def findClosest(self, words: List[str], word1: str, word2: str) -> int:
i, ans = 0, len(words)
for j, word in enumerate(words):
if word == word1 or word == word2:
if word != words[i] and (words[i] == word1 or words[i] == word2):
ans = min(ans, j-i)
i = j
return ans
二、字典
用数组记录两个词出现的位置,在找两个数组绝对值最小的差。
class Solution:
def findClosest(self, words: List[str], word1: str, word2: str) -> int:
p1 = []
p2 = []
for i in range(len(words)):
if words[i] == word1:
p1.append(i)
if words[i] == word2:
p2.append(i)
diff = len(words)
i, j = 0, 0
while (i < len(p1)) and (j < len(p2)):
if diff > abs(p1[i] - p2[j]):
diff = abs(p1[i] - p2[j])
if p1[i] > p2[j]:
j += 1
else:
i += 1
return diff