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
class Solution {
public:
int shortestDistance(vector<string>& wordsDict, string word1, string word2) {
if (wordsDict.size() == 0) {
return 0;
}
unordered_map<string, vector<int>> mp;
for (int i = 0; i < wordsDict.size(); i++) {
mp[wordsDict[i]].push_back(i);
}
int ans = INT_MAX, i = 0, j = 0;
auto dist_vec1 = mp[word1];
auto dist_vec2 = mp[word2];
while (i < dist_vec1.size() && j < dist_vec2.size()) {
ans = min(ans, abs(dist_vec1[i] - dist_vec2[j]));
if (dist_vec1[i] <= dist_vec2[j]) {
i++;
} else {
j++;
}
}
return ans;
}
};
No comments:
Post a Comment