C++ 中的最近单词距离三


假设我们有一个单词列表,以及另外两个称为 word1 和 word2 的单词,我们必须找到列表中这两个单词之间的最短距离。这里,word1 和 word2 可以是相同的,并且它们代表列表中的两个独立单词。我们假设 words = ["practice", "makes", "perfect", "skill", "makes"]。

因此,如果输入是 word1 = “makes”,word2 = “skill”,则输出将为 1

要解决此问题,我们将遵循以下步骤 −

  • ret := 10^9, l1 := 10^9, l2 := -10^9

  • n := words 的大小

  • 对于 i 从 0 开始,当 i < n,更新 (i 增加 1),执行 −

    • 如果 words[i] 与 word1 相同,则 −

      • l1 := i

    • 如果 words[i] 与 word2 相同,则 −

      • 如果 word1 与 word2 相同,则 −

        • l1 := l2

      • l2 := i

    • ret := |l2 - l1| 和 ret 的最小值

  • 返回 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

更新于: 18-11-2020

161 次查看

开启您的职业生涯

完成课程即可获得认证

开始
广告
© . All rights reserved.