# My Concise JAVA Solution

• public class Solution {
public int shortestWordDistance(String[] words, String word1, String word2) {
int p1 = -1;
int p2 = -1;
int min = Integer.MAX_VALUE;
for (int i = 0; i < words.length; i++) {
if (words[i].equals(word1)) {
if (word1.equals(word2)) {
if (p1 != -1 && i - p1 < min) {
min = i - p1;
}
p1 = i;
} else {
p1 = i;
if (p2 != -1 && p1 - p2 < min) {
min = p1 - p2;
}
}
} else if (words[i].equals(word2)) {
p2 = i;
if (p1 != -1 && p2 - p1 < min) {
min = p2 - p1;
}
}
}
return min;
}
}

• Nice code that solves the problem in just one function (originally I use a helper function specifically for word1 == word2). I rewrite your code in C++.

class Solution {
public:
int shortestWordDistance(vector<string>& words, string word1, string word2) {
int n = words.size(), idx1 = -1, idx2 = -1, dist = INT_MAX;
for (int i = 0; i < n; i++) {
if (words[i] == word1) {
if (word1 == word2) {
if (idx1 >= 0)
dist = min(dist, i - idx1);
idx1 = i;
}
else {
idx1 = i;
if (idx2 >= 0)
dist = min(dist, idx1 - idx2);
}
}
else if (words[i] == word2) {
idx2 = i;
if (idx1 >= 0)
dist = min(dist, idx2 - idx1);
}
}
return dist;
}
};

public int shortestWordDistance(String[] words, String word1, String word2) {
int min = Integer.MAX_VALUE;
int p1 = -1;
int p2 = -1;
boolean same = word1.equals(word2);
for (int i = 0; i < words.length; i++) {
if (words[i].equals(word1)) {
if (same) {
p2 = p1;  // Deal with another pointer too
}
p1 = i;
} else if (words[i].equals(word2)) {
p2 = i;
}

if (p1 != -1 && p2 != -1) {
min = Math.min(min, Math.abs(p1 - p2));
}
}
return min;
}

• Great Solutions,But I think the result should return 0 but not -1 when the word.length is 1

• Actually , I tried, it is accepted even without claim the case that when words.length == 0 and word1.equals(word2). But I don't get why.

• @yavinci Is it necessary to do

if (p1 != -1 && p2 != -1) {
min = Math.min(min, Math.abs(p1 - p2));
}

even if the current word is neither word1 nor word2? Why not just put it in the if and else-if branches?

Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.