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

C++での1つの編集距離


2つの文字列sとtがあるとします。両方が1つの編集距離だけ離れているかどうかを確認する必要があります。 1つの編集距離には3つのタイプがあります-

  • sに文字を挿入してtを取得します

  • sから文字を削除してtを取得します

  • sの文字を置き換えてtを取得します

したがって、入力がs ="ab"、t ="acb"の場合、出力はTrueになります

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

  • n:=sのサイズ、m:=tのサイズ

  • n

    • isOneEditDistance(t、s)を返す

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

    • s[i]がt[i]と等しくない場合、-

      • nがmと同じ場合、-

        • インデックス0から(i)までのsのサブストリングが、インデックス0から(i)までのtのサブストリングと同じである場合にtrueを返します

      • インデックス0から(i)までのsのサブストリングが、インデックス0から(i-1)までのtのサブストリングと同じである場合にtrueを返します

  • m+1がnと同じ場合はtrueを返します

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool isOneEditDistance(string s, string t) {
      int n = s.size();
      int m = t.size();
      if (n < m) {
         return isOneEditDistance(t, s);
      }
      for (int i = 0; i < m; i++) {
         if (s[i] != t[i]) {
            if (n == m) {
               return s.substr(i + 1) == t.substr(i + 1);
            }
            return s.substr(i + 1) == t.substr(i);
         }
      }
      return m + 1 == n;
   }
};
main(){
   Solution ob;
   cout << (ob.isOneEditDistance("ab", "acb"));
}

入力

s = "ab", t = "acb"

出力

1

  1. C++での最短単語距離II

    コンストラクターに単語のリストを受け取るクラスがあるとすると、word1とword2の2つの単語を受け取り、リスト内のこれら2つの単語間の最短距離を見つけるメソッドがあります。そのメソッドは、さまざまなパラメータを使用して何度も繰り返し呼び出されます。 言葉=[練習、 作る、 完璧、 スキル、作る]と仮定しましょう。 したがって、入力がword1 =「スキル」、word2 =「練習」のような場合、出力は3になります これを解決するには、次の手順に従います- 1つのマップを定義するm イニシャライザは単語の配列を取ります 初期化i:=0の場合、i <単語のサイズの場合、更

  2. C++のツリーに1行を追加

    二分木があり、値vと深さdもあるとすると、指定された深さdに値vのノードの行を追加する必要があります。ルートノードは深さ1にあります。この操作を実行するには、このルールに従う必要があります- 深さdがわかっているので、深さd-1の有効なツリーノードNごとに、値vをNの左サブツリールートと右サブツリールートとして持つ2つのツリーノードを作成する必要があります。また、Nの元の左サブツリーは、新しい左サブツリールートの左サブツリーになり、元の右サブツリーは、新しい右サブツリールートの右サブツリーになります。深さdが1の場合、つまり深さd-1がまったくない場合は、元のツリー全体の新しいルートとして値