public class WordDistance {
HashMap<String, List<Integer>> map = new HashMap<>();
public WordDistance(String[] words) {
for (int i = 0; i < words.length; i++) {
if (map.containsKey(words[i])) {
map.get(words[i]).add(i);
} else {
List<Integer> list = new ArrayList<>();
list.add(i);
map.put(words[i], list);
}
}
}
public int shortest(String word1, String word2) {
int min = Integer.MAX_VALUE;
List<Integer> l1 = map.get(word1);
List<Integer> l2 = map.get(word2);
int i1 = 0;
int i2 = 0;
while (i1 < l1.size() && i2 < l2.size()) {
if (l1.get(i1) < l2.get(i2)) {
min = Math.min(min, Math.abs(l1.get(i1) - l2.get(i2)));
i1++;
} else {
min = Math.min(min, Math.abs(l1.get(i1)) - l2.get(i2));
i2++;
}
}
return min;
}
}
/**
* Your WordDistance object will be instantiated and called as such:
* WordDistance obj = new WordDistance(words);
* int param_1 = obj.shortest(word1,word2);
*/
public class WordDistance {
Map<String, List<Integer>> map;
public WordDistance(String[] words) {
map = new HashMap<>();
for (int i = 0; i < words.length; i++) {
map.putIfAbsent(words[i], new ArrayList<>());
map.get(words[i]).add(i);
}
}
public int shortest(String word1, String word2) {
int distance = Integer.MAX_VALUE;
for (int i : map.get(word1)) {
for (int j : map.get(word2)) {
distance = Math.min(distance, Math.abs(i - j));
}
}
return distance;
}
}
/**
* Your WordDistance object will be instantiated and called as such:
* WordDistance obj = new WordDistance(words);
* int param_1 = obj.shortest(word1,word2);
*/