C ++中最短字距III
假设我们有一个单词列表以及另外两个单词word1和word2,我们必须在列表中找到这两个单词之间的最短距离。这里的单词1和单词2可以相同,它们代表列表中的两个单独的单词。让我们假设单词=[“练习”,“成功”,“完美”,“技能”,“成功”]。
因此,如果输入类似于word1=“makes”,word2=“skill”,则输出将为1
为了解决这个问题,我们将遵循以下步骤-
ret:=10^9,l1:=10^9,l2:=-10^9
n:=字数
对于初始化i:=0,当i<n时,更新(将i增加1),执行-
如果word1与word2相同,则-
l2:=我
l1:=l2
l1:=我
如果word[i]与word1相同,则-
如果word[i]与word2相同,则-
ret:=|l2-l1|的最小值然后退回
返回ret
例
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: int shortestWordDistance(vector<string<& words, string word1, string word2) { int ret = 1e9; int l1 = 1e9; int l2 = -1e9; int n = words.size(); for (int i = 0; i < n; i++) { if (words[i] == word1) { l1 = i; } if (words[i] == word2) { if (word1 == word2) { l1 = l2; } l2 = i; } ret = min(abs(l2 - l1), ret); } return ret; } }; main(){ Solution ob; vector<string< v = {"practice", "makes", "perfect", "skill", "makes"}; cout << (ob.shortestWordDistance(v, "makes", "skill")); }
输入值
{"practice", "makes", "perfect", "skill", "makes"},"makes", "skill"
输出结果
1