//Shortest Word Distance I:
public class Solution {
public int shortestWordDistance(String[] words, String word1, String word2) {
int index = -1;
int min = words.length;
for (int i = 0; i < words.length; i++) {
if (words[i].equals(word1) || words[i].equals(word2)) {
if (index != -1 && !words[index].equals(words[i])) {
min = Math.min(i - index, min);
}
index = i;
}
}
return min;
}
}
//Shortest Word Distance III:
public class Solution {
public int shortestWordDistance(String[] words, String word1, String word2) {
int index = -1;
int min = words.length;
for (int i = 0; i < words.length; i++) {
if (words[i].equals(word1) || words[i].equals(word2)) {
if (index != -1 && (word1.equals(word2) || !words[index].equals(words[i]))) {
min = Math.min(i - index, min);
}
index = i;
}
}
return min;
}
}
public class Solution {
public int shortestWordDistance(String[] words, String word1, String word2) {
if (words == null || words.length < 1) return -1;
int len = words.length;
Map<String, List<Integer>> map = new HashMap<>();
for (int i = 0; i < len; i++) {
map.putIfAbsent(words[i], new ArrayList<Integer>());
map.get(words[i]).add(i);
}
int distance = len;
if (word1.equals(word2)) {
List<Integer> idx = map.get(word1);
for (int i = 1; i < idx.size(); i++) {
distance = Math.min(distance, idx.get(i) - idx.get(i - 1));
}
return distance;
}
for (int i : map.get(word1)) {
for (int j : map.get(word2)) {
distance = Math.min(distance, Math.abs(j - i));
}
}
return distance;
}
}