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.