Welcome to Subscribe On Youtube
243. Shortest Word Distance
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
andword2
are inwordsDict
.word1 != word2
Solutions
It is enough to traverse the array once, initialize the two variables p1, p2 to -1, and then traverse the array.
When word 1 is encountered, its position is stored in p1, and if word 2 is encountered, its position is stored in p2. If p1, p2 are not -1 anymore, then update the result.
-
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; } }
-
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; } };
-
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
-
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 }