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

C++で1回削除した後に2つの文字列の1つに等しくなる文字列の数


2つの異なる文字列(たとえばs1とs2)が与えられ、タスクは、s1とs2の一意の文字を組み合わせて文字列(たとえばS)を形成し、文字列Sから1つの文字を削除した後、それが文字列を形成しているかどうかを確認することです。文字列s1またはs2に等しくなります。

入力- 文字列S1="utter"、文字列S2="バター";

出力- 1回の削除後に2つの文字列の1つに等しくなる文字列の数は次のとおりです。1

説明- 文字列s1とs2が与えられ、文字列Sから「バター」になります。文字列Sから文字「b」を削除すると、文字列s1に等しい「utter」になります。したがって、カウントは1になります。

入力- 文字列S1="fat"、文字列S2="ラット";

出力- 1回の削除後に2つの文字列の1つに等しくなる文字列の数は次のとおりです。2

説明- 文字列s1とs2が与えられ、文字列S、つまり「frat」を形成します。文字列Sから文字「rs」を削除すると「fat」になります。これは文字列s1と同じで、文字を削除すると'f'は文字列s2に等しい'rat'になるため、カウントは2になります。

以下のプログラムで使用されているアプローチは次のとおりです

  • 2つの文字列s1とs2を宣言し、文字列s1のサイズを計算して、さらに処理するためにデータを関数に渡します。
  • 可能な最大出力は2であるため、変数カウントを宣言して2に設定します。
  • ループトラバーサルの開始と終了として2つの一時変数を宣言します。
  • ループFORを0から文字列s1のサイズまで開始し、ループ内でs1 [i]がs2と等しくないかどうかを確認してから、startをiとして設定し、breakします
  • 文字列s1のサイズが1つ小さくなるまで、iから別のループFORを開始し、ループ内でs1がs2と等しくないかどうかを確認してから、endをiとして設定して中断します
  • 終了のIF値が開始よりも小さいことを確認してから、カウントを26 *(文字列s1 + 1のサイズ)に設定し、カウントを返します。
  • チェックの開始が終了と等しい場合は、カウントを返します
  • それ以外の場合は、ループFORをiから開始して+1を開始し、ループ内でs1[i]がs2[i-1]と等しくないかどうかを確認してから、カウントを1デクリメントして中断します
  • ループFORをiから開始+1から終了まで開始し、s1[i-1]がs2[i]と等しくないかどうかを確認してから、カウントを1デクリメントして中断します
  • カウントを返します。
  • 結果を印刷します。

#include <bits/stdc++.h>
using namespace std;

int equal_removal(string S1, string S2, int size_S1) {
   int count = 2;
   int start;
   int end;

   for (int i = 0; i < size_S1; ++i) {
      if (S1[i] != S2[i]) {
         start = i;
         break;
      }
   }
   for (int i = size_S1 - 1; i >= 0; i--) {
      if (S1[i] != S2[i]) {
         end = i;
         break;
      }
   }
   if (end < start) {
      count = 26 * (size_S1 + 1);
      return count;
   } else if (start == end) {
      return count;
   } else {
      for (int i = start + 1; i <= end; i++) {
         if (S1[i] != S2[i - 1]) {
            count--;
            break;
         }
      }
      for (int i = start + 1; i <= end; i++) {
         if (S1[i - 1] != S2[i]) {
            count--;
            break;
         }
      }
      return count;
   }
}
int main() {
   string S1 = "utter";
   string S2 = "butter";
   int size_S1 = S1.length();
   cout << "Count of strings that become equal to one of the two strings after one removal are: " << equal_removal(S1, S2, size_S1);
   return 0;
}

上記のコードを実行すると、次の出力が生成されます-

出力

Count of strings that become equal to one of the two strings after one removal are: 1

  1. C++でN回カットした後の円のピースを数えます

    2D円に適用されるカットの数を表す整数Nが与えられます。各円は、円を2つに分割します。目標は、Nカット後に円の断片を見つけることです。 個数=2*いいえ。カットの 例を挙げて理解しましょう。 入力 − n =1 出力 −円の断片:2 説明 − 入力 − n =3 出力 −円の断片:6 説明 − 以下のプログラムで使用されているアプローチは次のとおりです いくつかのカットにNを使用します。 ピースを取る=1*N。 結果を印刷します。 例 #include <bits/stdc++.h> using namespace st

  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”},