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

2つの文字列を分割して回文にするプログラムをC++で記述します


弦を逆にした後も同じままである場合、その弦は回文弦であると言われます。

この特定の問題では、同じ長さの2つの文字列「a」と「b」を指定しました。それらがいくつかのインデックスで分割されている場合、タスクは文字列の合計が回文になるかどうかを確認することです。

長さが「4」の2つの文字列「a」と「b」があり、両方の文字列をインデックス「3」で分割した後、

aaa | b およびbbb|

aaa(最初の文字列のプレフィックス)+ a(2番目の文字列のサフィックス)は回文である必要があります

または

b(最初の文字列のサフィックス)+ bbb(2番目の文字列のプレフィックス)は回文である必要があります

入力-1:

a = “abcdef”

b = “fedcba”

出力:

True

説明: 文字列'a'と文字列'b'をインデックス'2'で分割すると、次のようになります。

abc | defとfed| cba

abc(最初の文字列の接頭辞)+ cba(2番目の文字列の接尾辞)が回文文字列になるようにします。したがって、「True」を返します。

入力-2:

a =  “eatable”

b =  “tableau”

出力:

False

説明: これらの2つの文字列を回文にする方法はありません。

この問題を解決するためのアプローチ

この特定の問題を解決するために、2ポインターアプローチを使用します。このアプローチでは、最初に、lowとhighの2つのポインターを初期化して、lowが「0」を指し、highが文字列の最後の文字を指すようにします。

両方の文字列の長さが等しいため、いずれかが2文字未満であるかどうかを確認します。はいの場合、Trueを返します。それ以外の場合は、ポインターを使用して文字列全体を反復処理することにより、再帰的にチェックします。両方の文字列が等しい場合はTrueを返し、そうでない場合はFalseを返します。

  • それぞれ「a」と「b」の2つの文字列を取ります。
  • ブール関数checkPalindromic(string a、string b)は、入力パラメーターとして2つの文字列を受け取り、それに応じてTrueまたはFalseを返します。
  • low =0およびhigh=文字列'b'の長さで、lowとhighの2つのポインタを初期化します。
  • 文字列を繰り返し処理し、両方の文字列の文字が等しいかどうかを確認します。
  • ブール関数split(string a、string b)は、2つの文字列を受け取り、それらが回文である場合はTrueを返し、そうでない場合はFalseを返します。

#include <bits/stdc++.h>
using namespace std;
bool isPalindrome(string a, int low, int high) {
   while (low < high) {
      if (a[low] != a[high])
         return false;
      low++;
      high--;
   }
   return true;
}
bool Split(string a, string b) {
   int low = 0;
   int high = b.size() - 1;
   while (low < high and a[low] == b[high]) {
      low++;
      high--;
   }
   return isPalindrome(a, low, high) || isPalindrome(b, low, high);
}
bool checkPalindromic(string a, string b) {
   if (a.size() < 2)
      return true;
   return Split(a, b) || Split(b, a);
}
int main() {
   string a = "abcpqr";
   string b = "mnocba";
   if (checkPalindromic(a, b)) {
      cout << "True" << endl;
   } else {
      cout << "False" << endl;
   }
   return 0;
}

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

出力

True

説明: 与えられた文字列「abcpqr」と「mnocba」をインデックス「2」で分割すると、

a(プレフィックス)=abcおよび b(サフィックス)=cba

a(サフィックス)=pqrおよび b(プレフィックス)=mno

a(接頭辞)+ b(接尾辞)が回文を作成するため、出力はTrueであることがわかります。


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

  2. Pythonを使用して2つの文字列を分割して回文を作成するプログラム

    長さが同じ2つの文字列aとbがあるとします。インデックスを選択し、その選択したインデックスで両方の文字列を分割して、aを2つの文字列に分割する必要があります。a_prefとa_suffここで、a =a_pref | a_suff、およびbを2つの文字列に分割します。b_pref| b_suff(|は連結演算子)ここで、b =b_pref+b_suff。 a_pref+b_suffまたはb_pref+a_suffが回文を形成するかどうかを確認します。 (分割は空の文字列である可能性があります) したがって、入力がa =pqrst b =turqpのような場合、[pq、 rst]のようなbと[t