Array
String
Description
Given an array of strings wordsDict
and two different strings that already exist in the array word1
and word2
, return the shortest distance between these two words in the list .
Example 1:
Input: wordsDict = ["practice", "makes", "perfect", "coding", "makes"], word1 = "coding", word2 = "practice"
Output: 3
Example 2:
Input: wordsDict = ["practice", "makes", "perfect", "coding", "makes"], word1 = "makes", word2 = "coding"
Output: 1
Constraints:
2 <= wordsDict.length <= 3 * 104
1 <= wordsDict[i].length <= 10
wordsDict[i]
consists of lowercase English letters.
word1
and word2
are in wordsDict
.
word1 != word2
Solutions
Solution 1
Python3 Java C++ Go
1
2
3
4
5
6
7
8
9
10
11
12 class Solution :
def shortestDistance ( self , wordsDict : List [ str ], word1 : str , word2 : str ) -> int :
i = j = - 1
ans = inf
for k , w in enumerate ( wordsDict ):
if w == word1 :
i = k
if w == word2 :
j = k
if i != - 1 and j != - 1 :
ans = min ( ans , abs ( i - j ))
return ans
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 class Solution {
public int shortestDistance ( String [] wordsDict , String word1 , String word2 ) {
int ans = 0x3f3f3f3f ;
for ( int k = 0 , i = - 1 , j = - 1 ; k < wordsDict . length ; ++ k ) {
if ( wordsDict [ k ] . equals ( word1 )) {
i = k ;
}
if ( wordsDict [ k ] . equals ( word2 )) {
j = k ;
}
if ( i != - 1 && j != - 1 ) {
ans = Math . min ( ans , Math . abs ( i - j ));
}
}
return ans ;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 class Solution {
public :
int shortestDistance ( vector < string >& wordsDict , string word1 , string word2 ) {
int ans = INT_MAX ;
for ( int k = 0 , i = -1 , j = -1 ; k < wordsDict . size (); ++ k ) {
if ( wordsDict [ k ] == word1 ) {
i = k ;
}
if ( wordsDict [ k ] == word2 ) {
j = k ;
}
if ( i != -1 && j != -1 ) {
ans = min ( ans , abs ( i - j ));
}
}
return ans ;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 func shortestDistance ( wordsDict [] string , word1 string , word2 string ) int {
ans := 0x3f3f3f3f
i , j := - 1 , - 1
for k , w := range wordsDict {
if w == word1 {
i = k
}
if w == word2 {
j = k
}
if i != - 1 && j != - 1 {
ans = min ( ans , abs ( i - j ))
}
}
return ans
}
func abs ( x int ) int {
if x < 0 {
return - x
}
return x
}