C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++での最短単語距離III


単語のリストと、word1およびword2と呼ばれる別の2つの単語があるとすると、リスト内でこれら2つの単語間の最短距離を見つける必要があります。ここで、word1とword2は同じである可能性があり、リスト内の2つの個別の単語を表します。言葉=["練習"、 "作る"、 "完璧"、 "スキル"、"作る"]と仮定しましょう。

したがって、入力がword1 =“ makes”、word2 =“ skil”の場合、出力は1になります

これを解決するには、次の手順に従います-

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

  • n:=単語のサイズ

  • 初期化i:=0の場合、i

    • 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

  1. C++の醜い番号III

    n番目の醜い数を見つけるプログラムを書かなければならないとしましょう。醜い数は、aまたはbまたはcで割り切れる正の整数です。したがって、たとえば、n=3およびa=2、b=3およびc=5の場合、醜い数は[2,3,4,5,6,8,9,10]であるため、出力は4になります。 、3番目は4です。 これを解決するには、次の手順に従います- ok()というメソッドを作成します。これには、x、a、b、cが必要です。これは、以下のように動作します- return(x / a)+(x / b)+(x / c)–(x / lcm(a、b))-(x / lcm(b、c))-(x / lcm(b、c)

  2. C++でのターゲットカラーまでの最短距離

    配列の色があり、1、2、3の3色があるとします。いくつかのクエリを実行しました。各クエリは2つの整数iとcで構成されており、指定されたインデックスiとターゲットカラーcの間の最短距離を見つける必要があります。解決策がない場合は、-1を返します。したがって、colors配列が[1,1,2,1,3,2,2,3,3]のようであり、querys配列が[[1,3]、[2,2]、[6,1]のようである場合]]、出力は[3,0,3]になります。これは、インデックス1から最も近い3がインデックス4(3ステップ離れている)にあるためです。次に、インデックス2から最も近い2は、インデックス2自体にあります(0ステ