给定一个单词列表和两个单词 word1 和 word2,返回列表中这两个单词之间的最短距离。
示例:
假设 words = ["practice", "makes", "perfect", "coding", "makes"]
输入: word1 =“coding”
, word2 =“practice”
输出: 3
输入: word1 ="makes"
, word2 ="coding"
输出: 1
注意:
你可以假设 word1 不等于 word2, 并且 word1 和 word2 都在列表里。
思路:
线性扫描words, 用两个坐标记录两个单词最新出现的下标,
如果当前单词是word1 或者 word2 ,那么刷新坐标之后看能不能刷新res。
class Solution(object):
def shortestDistance(self, words, word1, word2):
"""
:type words: List[str]
:type word1: str
:type word2: str
:rtype: int
"""
# pos1, pos2 = -1,
res = len(words)
pos1, pos2 = -res, -res
for idx, word in enumerate(words):
if word == word1:
pos1 = idx
elif word == word2:
pos2 = idx
else:
continue
# print pos1, pos2, res, abs(pos1 - pos2)
res = min(res, abs(pos1 - pos2))
return res
下面的写于2019年8月17日09:43:31
class Solution(object):
def shortestDistance(self, words, word1, word2):
"""
:type words: List[str]
:type word1: str
:type word2: str
:rtype: int
"""
res = len(words) - 1
pos1, pos2 = -1, -1
for i, word in enumerate(words):
if word == word1:
pos1 = i
elif word == word2:
pos2 = i
if pos1 != -1 and pos2 != -1:
res = min(res, abs(pos1 - pos2))
return res