LeetCode 244. 最短单词距离 II
题目描述
请设计一个类,使该类的构造函数能够接收一个字符串数组。然后再实现一个方法,该方法能够分别接收两个单词,并返回列表中这两个单词之间的最短距离。实现 WordDistanc 类:
WordDistance(String[] wordsDict) 用字符串数组 wordsDict 初始化对象。
int shortest(String word1, String word2) 返回数组 worddict 中 word1 和 word2 之间的最短距离。
示例 1:
输入:
[“WordDistance”, “shortest”, “shortest”]
[[[“practice”, “makes”, “perfect”, “coding”, “makes”]], [“coding”, “practice”], [“makes”, “coding”]]
输出:
[null, 3, 1]
解释:
WordDistance wordDistance = new WordDistance([“practice”, “makes”, “perfect”, “coding”, “makes”]);
wordDistance.shortest(“coding”, “practice”); // 返回 3
wordDistance.shortest(“makes”, “coding”); // 返回 1
1 <= wordsDict.length <= 3 * 104
1 <= wordsDict[i].length <= 10
wordsDict[i] 由小写英文字母组成
word1 和 word2 在数组 wordsDict 中
word1 != word2
shortest 操作次数不大于 5000
一、解题关键词
二、解题报告
1.思路分析
2.时间复杂度
3.代码示例
class WordDistance {
Map<String,List<Integer>> map = new HashMap<>();
public WordDistance(String[] wordsDict) {
int len = wordsDict.length;
for(int i = 0;i <len ;i++){
String word = wordsDict[i];
map.putIfAbsent(word,new ArrayList<>());
map.get(word).add(i);
}
}
public int shortest(String word1, String word2) {
List<Integer> index1 = map.get(word1);
List<Integer> index2 = map.get(word2);
int size1= index1.size();
int size2 = index2.size();
int pos1 = 0;
int pos2 = 0;
int ans = Integer.MAX_VALUE;
while(pos1 < size1 && pos2 < size2){
int idx1 = index1.get(pos1);
int idx2 = index2.get(pos2);
ans = Math.min(ans,Math.abs(idx1 - idx2));
if(idx1 < idx2){
pos1++;
} else{
pos2++;
}
}
return ans;
}
}
/**
* Your WordDistance object will be instantiated and called as such:
* WordDistance obj = new WordDistance(wordsDict);
* int param_1 = obj.shortest(word1,word2);
*/
2.知识点