Leetcode题库面试题 17.11. 单词距离(python 实现)

文章目录

  • 思路
    • 可优化
  • 代码

思路

words = [“I”,“am”,“a”,“student”,“from”,“a”,“university”,“in”,“a”,“city”]
word1 = “a”
word2 = “student”

遍历words记录word1、word2出现的位置
loc = [[2, ‘a’], [3, ‘student’], [5, ‘a’], [8, ‘a’]]
遍历loc,获取两单词的最短距离

可优化

上述方案需要两次遍历,实际上只需一次即可
设最小值为 ret = words的长度,
记录word1、word2在words中出现的第1个位置,记作[word,loc],
继续向后遍历,记录word1、word2在words中出现的第2个位置,记作[word,loc]
若前后两单词不同则其对应的loc相减的差值与ret比较,若差值小于ret,则将ret更新为该差值
若两单词相同,则记录该单词以及其位置
重复上述操作直至遍历完整个列表

代码

class Solution:
    def findClosest(self, words: List[str], word1: str, word2: str) -> int:
        loc_lt = []
        for i in range(len(words)):
            if words[i]==word1 or words[i]==word2:
                loc_lt.append([i,words[i]])
        print(loc_lt)
        dist = len(words)
        for i in range(len(loc_lt)-1):
            if (loc_lt[i][1]!=loc_lt[i+1][1]) and ((loc_lt[i+1][0] - loc_lt[i][0])<dist):
                dist = loc_lt[i+1][0] - loc_lt[i][0]
        return dist

你可能感兴趣的:(Leetcode刷题集,leetcode,算法)