C++で文字列を等しくするための最小スワップ
これを解決するには、次の手順に従います-
- x1、x2、y1、y2を0に設定します
- 0からs1のサイズまでの範囲のiの場合
- a:=s1 [i]およびb:=s2 [i]
- aがbと同じでない場合、
- a =‘x’の場合はx1を増やし、それ以外の場合はy1を1増やします
- b =‘x’の場合はx2を増やし、それ以外の場合はy2を1増やします
- (x1 + x2)が奇数または(y1 + y2)が奇数の場合、-1を返します
- return x1 / 2 + y1 / 2 +(x1 mod 2)* 2
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class Solution { public: int minimumSwap(string s1, string s2) { int x1 = 0, x2 = 0, y1 = 0, y2 = 0; for(int i = 0; i < s1.size(); i++){ char a = s1[i]; char b = s2[i]; if(a != b){ if(a == 'x')x1++; else y1++; if(b == 'x')x2++; else y2++; } } if ((x1 + x2) & 1 || (y1 + y2) & 1)return -1; return x1/2 + y1/2 + (x1 % 2) * 2; } }; main(){ Solution ob; cout <<ob.minimumSwap("xy", "yx"); }
入力
"xy" "yx"
出力
2
-
C++で2つの文字列を同一にするための最小コスト
2つの文字列AとBがあり、CostAとCostBのような別の2つのコスト値があるとします。 AとBを同一にするための最小コストを見つける必要があります。文字列から文字を削除できます。文字列Aから削除するためのコストはCostAであり、文字列Bから削除するためのコストはCostBです。文字列からすべての文字を削除するコストは同じです。文字列A=“ wxyz”、B =“ wyzx”、CostAが10、CostBが20であると仮定します。したがって、出力は30になります。両方の文字列からxを削除すると、AとBは同じになります。したがって、コストは10 + 20=30です。 これは最長共通部分列問題
-
C++で2つの数値文字列を同一にするための最小コスト
2つの数値文字列AとBがあるとします。AとBを同一にするための最小コストを見つける必要があります。実行できる操作は1つだけです。つまり、文字列から数字を削除できます。数値から数字を削除するためのコストは、数字の値と同じです。文字列A=“ 6789”、B =“ 7859”とすると、Aから6を削除し、Bから5を削除する必要があるため、コストは5 + 6=11になります。 これは最長共通部分列問題のバリエーションの1つです。 AとBからLCSの長さを見つける必要があります。この式を使用することで、最小のコストを得ることができます。 MinimumCost =CostA + CostB−2 ∗ l