244. Shortest Word Distance II
class WordDistance {
Map<String, List<Integer>> map;
public WordDistance(String[] wordsDict) {
map = new HashMap<>();
for (int i = 0; i < wordsDict.length; i++) {
String word = wordsDict[i];
if (map.containsKey(word)) {
map.get(word).add(i);
} else {
List<Integer> list = new ArrayList<>();
list.add(i);
map.put(word, list);
}
}
}
public int shortest(String word1, String word2) {
List<Integer> list1 = map.get(word1);
List<Integer> list2 = map.get(word2);
Collections.sort(list1);
Collections.sort(list2);
int i = 0;
int j = 0;
int shortest = Integer.MAX_VALUE;
while (i < list1.size() && j < list2.size()) {
shortest = Math.min(shortest, Math.abs(list1.get(i) - list2.get(j)));
if (list1.get(i) < list2.get(j)) {
i++;
} else {
j++;
}
}
return shortest;
}
}
/**
* Your WordDistance object will be instantiated and called as such:
* WordDistance obj = new WordDistance(wordsDict);
* int param_1 = obj.shortest(word1,word2);
*/