Given a list of words and two words word1 and word2, return the shortest distance between these two words in the list.
For example,
Assume that words = ["practice", "makes", "perfect", "coding", "makes"].
Given word1 = “coding”, word2 = “practice”, return 3.
Given word1 = "makes", word2 = "coding", return 1.
Note:
You may assume that word1 does not equal to word2, and word1 and word2 are both in the list.
双指针法:time O(N), space O(1)
一个指针指向word1上次出现的位置,一个指针指向word2上次出现的位置。因为两个单词如果比较接近的话,肯定是相邻的word1和word2的位置之差,所以我们只要每次得到一个新位置和另一个单词的位置比较一下就行了。
public class Solution {
public int shortestDistance(String[] words, String word1, String word2) {
int i=-1, j=-1;
int min = Integer.MAX_VALUE;
for (int k=0; k<words.length; k++) {
if (!words[k].equals(word1) && !words[k].equals(word2)) continue;
else if (words[k].equals(word1)) {
i = k;
}
else if (words[k].equals(word2)) {
j = k;
}
if (i!=-1 && j!=-1) {
min = Math.min(min, Math.abs(j-i));
}
}
return min;
}
}