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