C++での2つの文字列の削除操作
w1とw2の2つの単語があるとすると、w1とw2を同じにするために必要な最小ステップ数を見つける必要があります。各ステップで、いずれかの文字列の1文字を削除できます。 。したがって、入力が「sea」や「eat」の場合、出力は2になります。これは、w1から「s」を削除する必要があるためです。これは「ea」になり、w2の「eat」から「t」を削除します。それならそれらは同じです。
これを解決するために、次の手順に従います
- n:=s1のサイズ、m:=s2のサイズ
- 文字列s1とs2の前に1つの空白スペースを追加し、それに応じてs1とs2を更新します
- サイズ(n + 1)x(m + 1)のテーブルを1つ作成します
- for i:=1からm
- dp [0、i]:=dp [0、i-1] + 1
- for i:=1からn
- dp [i、0]:=dp [i – 1、0] + 1
- 1からnの範囲のiの場合
- 1からmの範囲のjの場合
- if s1 [i] =s2 [j]
- dp [i、j]:=dp [i – 1、j-1]
- else dp [i、j]=最小のdp[i – 1、j] +1およびdp[i、j-1] + 1
- if s1 [i] =s2 [j]
- 1からmの範囲のjの場合
- return dp [n、m]
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class Solution { public: int minDistance(string s1, string s2) { int n = s1.size(); int m = s2.size(); s1 = " " + s1; s2 = " " + s2; vector < vector <int> > dp(n + 1, vector <int>(m + 1)); for(int i = 1; i <= m; i++){ dp[0][i] = dp[0][i - 1] + 1; } for(int i = 1; i <= n; i++){ dp[i][0] = dp[i - 1][0] + 1; } for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ if(s1[i] == s2[j]){ dp[i][j] = dp[i - 1][j - 1]; } else{ dp[i][j] = min(dp[i - 1][j] + 1, dp[i][j - 1] + 1); } } } return dp[n][m]; } }; main(){ Solution ob; vector<int> v = {1,1,1}; cout << (ob.minDistance("sea", "eat")); }
入力
"sea" "eat"
出力
2
-
C++で2つのバイナリ文字列を追加するプログラム
2進数の文字列が2つある場合、それら2つの2進数文字列を加算して得られた結果を見つけ、その結果を2進数文字列として返す必要があります。 2進数は、0または1のいずれかで表される数値です。2つの2進数を加算する際には、2進数の加算規則があります。 0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0, carry 1 入力 str1 = {“11”}, str2 = {“1”} 出力 “100” 入力 str1 = {“110”},
-
C++での2本の線の交点のプログラム
線ABに対応する点AとB、および線PQに対応する点PとQが与えられます。タスクは、これら2つの線の交点を見つけることです。 注 −点はX座標とY座標の2D平面で与えられます。 ここで、A(a1、a2)、B(b1、b2)およびC(c1、c2)、D(d1、d2)は、2つの異なる線を形成している座標であり、P(p1、p2)は交点です。 (交点の図解のためだけに) 交点を見つける方法 − 上の図を-としましょう 例 したがって、(a1、a2)、(b1、b2)、(c1、c2)、(d1、d2)を使用して、:A1 =b2 --a2B1 =a1 --b1C1 =(A1 * a1)+( B1 *