题目:
给定一个字符串数组 wordsDict 和两个字符串 word1 和 word2 ,返回列表中这两个单词之间的最短距离。
示例 :
输入:wordsDict = [“practice”, “makes”, “perfect”, “coding”, “makes”], word1 = “makes”, word2 = “coding”
输出:1
word1 = “makes”, word2 = “makes”
输出:3
注意:word1 和 word2 是有可能相同的,并且它们将分别表示为列表中 两个独立的单词 。
这题看起来是不是似曾相似?哈哈 其题是这题演变过来的243最短单词距离, 不过这里是word1 和 word2 有可能相同的, 但是思路还是那个 就是想办法定位 word1 word2 在数组中的位置(有两张情况, 需要分开处理~), 计算其相对距离, 求出其最短即可
class Solution {
public:
int shortestWordDistance(vector<string>& wordsDict, string word1, string word2) {
int pos1 = -1, pos2 = -1,res = wordsDict.size();
// 此处有很妙的设定, 因为可能wordsDict[0] 出现目标单词~
for(int i = 0;i<wordsDict.size(); i++)
{
if(word2 != word1) // 此处做法和 243题做法一样
{
if(wordsDict[i] == word1) pos1 = i;
else if(wordsDict[i] == word2) pos2 = i;
if(pos1 != -1 && pos2 != -1) res = min(abs(pos1-pos2), res);
}
else{ // word1 == word2 的情况~
if(wordsDict[i] == word1) pos1 = i;
if(pos1 != -1 && pos2!=-1 && pos2 != pos1) res = min(abs(pos2-pos1), res);
pos2 = pos1;
}
}
return res;
}
};
欢迎大家前来观看, 如果有其他比较好的解法, 欢迎在下方评论区评论分享哈, 谢谢大家~ 😄