LeetCode-Python-245. 最短单词距离 III

664 篇文章 23 订阅

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

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

示例:
假设 words = ["practice", "makes", "perfect", "coding", "makes"].

输入: word1 = “makes”, word2 = “coding”
输出: 1
输入: word1 = "makes", word2 = "makes"
输出: 3
注意:
你可以假设 word1 和 word2 都在列表里。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shortest-word-distance-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:

分类讨论,

如果word1!= word2那么和之前的题目一模一样,

如果相等,那么就用一个变量记录上一次出现的下表即可。

class Solution(object):
    def shortestWordDistance(self, words, word1, word2):
        """
        :type words: List[str]
        :type word1: str
        :type word2: str
        :rtype: int
        """
        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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值