要求
给定一个字符串数组 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
解题思路:当我们的word1和word2不相同的时候,就是和最短单词距离 II是一样的,当我们的word1和word2相同的时候,我们要找到最近的两个相同的单词的距离。