我是靠谱客的博主 谨慎飞鸟,最近开发中收集的这篇文章主要介绍单词的距离(leetcode),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(相隔单词数),如果寻找过程在
这个文件中重复多次,而每次寻找的单词不同,你能优化吗?

  • 方法一 ,双指法

    class Solution:
        def findClosest(self, words, word1, word2):
            dis = float("inf") # 正无穷大
            w1,w2 = -1,-1
            i = 0
            while i < len(words):
                if words[i] == word1: # 记录word1 出现的下标
                    w1 = i
                elif words[i] == word2: # 记录word2 出现的下标
                    w2 = i
                if w1 !=-1 and w2 !=-1: # 说明word1 和word2 在words 出现过,
                    dis = min(dis,abs(w2-w1)) # 更新最短距离
                i+=1
            return dis
    
  • 解法二 直接记录该词和改词出现的索引

    class Solution:
        def findClosest(self, words, word1: str, word2: str):
            dis = float("inf")
            temp = []
            for i,v in enumerate(words):
                if v == word1:
                    if temp and temp[-1][0] ==word2: # 已经向temp中添加数据并且该数不是word1,采取更新最短距离
                        dis = min(dis,i-temp[-1][1])
                    temp.append((word1,i)) # 记录该元素和下标
                elif v == word2:
                    if temp and temp[-1][0] == word1:
                        dis = min(dis,i-temp[-1][1])
                    temp.append((word2,i))
            return dis
    
  • 解法三

    class Solution:
        def findClosest(self, words, word1: str, word2: str):
            i,ans = 0,len(words)
            for j,word in enumerate(words):
                if word ==word1 or word ==word2:
                    if word != words[i] and (words[i] == word1 or words[i]==word2):
                        ans = min(ans,j-i)
                    i=j
            return ans
    

最后

以上就是谨慎飞鸟为你收集整理的单词的距离(leetcode)的全部内容,希望文章能够帮你解决单词的距离(leetcode)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部