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
-
C++での最短単語距離II
コンストラクターに単語のリストを受け取るクラスがあるとすると、word1とword2の2つの単語を受け取り、リスト内のこれら2つの単語間の最短距離を見つけるメソッドがあります。そのメソッドは、さまざまなパラメータを使用して何度も繰り返し呼び出されます。 言葉=[練習、 作る、 完璧、 スキル、作る]と仮定しましょう。 したがって、入力がword1 =「スキル」、word2 =「練習」のような場合、出力は3になります これを解決するには、次の手順に従います- 1つのマップを定義するm イニシャライザは単語の配列を取ります 初期化i:=0の場合、i <単語のサイズの場合、更
-
C++のツリーに1行を追加
二分木があり、値vと深さdもあるとすると、指定された深さdに値vのノードの行を追加する必要があります。ルートノードは深さ1にあります。この操作を実行するには、このルールに従う必要があります- 深さdがわかっているので、深さd-1の有効なツリーノードNごとに、値vをNの左サブツリールートと右サブツリールートとして持つ2つのツリーノードを作成する必要があります。また、Nの元の左サブツリーは、新しい左サブツリールートの左サブツリーになり、元の右サブツリーは、新しい右サブツリールートの右サブツリーになります。深さdが1の場合、つまり深さd-1がまったくない場合は、元のツリー全体の新しいルートとして値