BiruLyu
8/5/2017 - 5:41 PM

245. Shortest Word Distance III(#).java

//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;
    }
}