请设计一个类,使该类的构造函数能够接收一个单词列表。然后再实现一个方法,该方法能够分别接收两个单词 word1 和 word2,并返回列表中这两个单词之间的最短距离。您的方法将被以不同的参数调用多次。
示例:
假设 words = ["practice", "makes", "perfect", "coding", "makes"]
输入: word1 = “coding”, word2 = “practice”
输出: 3
输入: word1 = "makes", word2 = "coding"
输出: 1
注意:
你可以假设 word1 不等于 word2, 并且 word1 和 word2 都在列表里。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shortest-word-distance-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:这题比上一题多出来的考虑是这次我们的方法将被以不同的参数调用多次,所以不能暴力解题了,可以用dict存储单词和对应的下标,这样调用shortest的时候,就只需要处理dict中word1和word2的记录即可。
class WordDistance(object):
def __init__(self, words):
from collections import defaultdict
self.words = words
self.dict= defaultdict(list)
for i, word in enumerate(words):
self.dcit[word].append(i)
def shortest(self, word1, word2):
res = float('inf')
for l1 in self.dict[word1]:
for l2 in self.dcit[word2]:
res = min(res, abs(l1 - l2))
return res