leetcode_245 最短单词距离 III

170 阅读1分钟

要求

给定一个字符串数组 wordsDict 和两个字符串 word1 和 word2 ,返回列表中这两个单词之间的最短距离。

注意:word1 和 word2 是有可能相同的,并且它们将分别表示为列表中 两个独立的单词 。

示例 1:

输入:wordsDict = ["practice", "makes", "perfect", "coding", "makes"], word1 = "makes", word2 = "coding"
输出:1

示例 2:

输入:wordsDict = ["practice", "makes", "perfect", "coding", "makes"], word1 = "makes", word2 = "makes"
输出:3

提示:

  • 1 <= wordsDict.length <= 105
  • 1 <= wordsDict[i].length <= 10
  • wordsDict[i] 由小写英文字母组成
  • word1 和 word2 都在 wordsDict 中

核心代码

class Solution:
    def shortestWordDistance(self, wordsDict: List[str], word1: str, word2: str) -> int:
        words = wordsDict
        res = len(words)
        
        if word1 != word2:
            pos1, pos2 = -1, -1
            for i, word in enumerate(words):
                if word == word1:
                    pos1 = i   
                elif word == word2:
                    pos2 = i
                if pos2 != -1 and pos1 != -1:
                    res = min(res, abs(pos1 - pos2))
        else:
            pos = -1
            for i, word in enumerate(words):
                if word == word1:
                    if pos != -1:
                        # print i, pos
                        res = min(res, i - pos)
                    pos = i
                        
        return res

image.png

解题思路:当我们的word1和word2不相同的时候,就是和最短单词距离 II是一样的,当我们的word1和word2相同的时候,我们要找到最近的两个相同的单词的距离。