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

C++で距離を編集する


word1とword2の2つの単語があるとすると、word1からword2に協調するために必要な操作の最小数を見つける必要があります。操作には、文字の挿入、文字の削除、文字の置換の3種類があります。したがって、入力文字列が「評価」および「変動」の場合、結果は5になります。

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

  • n:=w1のサイズ、m:=w2のサイズ、

  • サイズn+1の配列dpを作成します

  • 0からnの範囲のiの場合

    • dp [i]:=サイズm+1の新しい配列

    • 0からmの範囲のjの場合-

      • dp [i、j]:=0

      • i =0の場合、dp [i、j] =j

      • それ以外の場合、j =0の場合、dp [i、j]:=i

  • w1:=空白スペースと連結w1、w2:=空白スペースと連結w2

  • 1からnの範囲のiの場合

    • 1からmの範囲のjの場合

      • w1[i]がw2[j]でない場合、dp [i、j]:=1+最小のdp[i– 1、j]、dp [i、j – 1]、dp [i – 1、j – 1]

      • それ以外の場合、dp [i、j]:=dp [i – 1、j – 1]

  • dp [n、m]

    を返します

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int minDistance(string w1, string w2) {
      int n = w1.size();
      int m =w2.size();
      int** dp = new int*[n+1];
      for(int i =0;i<=n;i++){
         dp[i] = new int[m+1];
         for(int j=0;j<=m;j++){
            dp[i][j]=0;
            if(i==0)dp[i][j]=j;
            else if(j==0)dp[i][j] = i;
         }
      }
      w1 = " " + w1;
      w2 = " " + w2;
      for(int i =1;i<=n;i++){
         for(int j = 1;j<=m;j++){
            if(w1[i] !=w2[j]){
               dp[i][j] = 1+min({dp[i-1][j],dp[i][j-1],dp[i1][j-1]});
            } else {
               dp[i][j] = dp[i-1][j-1];
            }
         }
      }
      return dp[n][m];
   }
};
main(){
   Solution ob;
   cout << (ob.minDistance("fluctuate", "evaluate"));
}

入力

"fluctuate"
"evaluate"

出力

5

  1. C++の二分木のすべてのノード距離K

    二分木、ターゲットノード、および1つの値Kがあるとします。ターゲットノードからの距離がKであるすべてのノードの値のリストを見つける必要があります。 したがって、入力がroot =[3,5,1,6,2,0,8、null、null、7,4]、target =5、K =2の場合、出力は[7,4 、1]、これは、ターゲットノードから距離2にあるノードの値が7、4、および1であるためです。 これを解決するには、次の手順に従います- 関数dfs()を定義します。これはノードを取得し、PAはNULLで初期化します。 ノードがnullの場合、- 戻る 親[ノード]:=pa

  2. C ++で単項マイナス演算子をオーバーロードしますか?

    operatorキーワードは、クラスのインスタンスに適用されたときにoperator-symbolが何を意味するかを指定する関数を宣言します。これにより、演算子に複数の意味が与えられるか、「オーバーロード」されます。コンパイラーは、オペランドのタイプを調べることにより、演算子のさまざまな意味を区別します。 単項演算子は単一のオペランドで動作し、以下は単項演算子の例です- インクリメント(++)およびデクリメント(-)演算子。 単項マイナス(-)演算子。 論理否定(!)演算子。 単項演算子は、呼び出されたオブジェクトを操作します。通常、この演算子は、!obj、-obj、および++ obj