概述
有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离(相隔单词数),如果寻找过程在
这个文件中重复多次,而每次寻找的单词不同,你能优化吗?
-
方法一 ,双指法
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)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复