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

与えられた文字列AがC++のBのサブシーケンスであるような回文文字列Bを見つけます


文字列Aがあるとすると、回文となる別の文字列Bを見つける必要があります。そして、与えられた文字列AはBのサブシーケンスになります。文字列のサブシーケンスは、残りの文字の順序を変更せずに一部の文字を削除することによって形成できる文字列です。文字列が「cotst」であるとすると、生成された文字列は「contest」になります。このプログラムの入力では、A =“ ab”を選択しました。生成される文字列は“ abba”になり、これは回文です。

これを解決するために、このアプローチに従います。これは非常に簡単です。Aを反転し、Aの後に反転部分を追加して、Bを形成します。したがって、B =A + reverse(A)

#include<iostream>
#include<algorithm>
using namespace std;
bool isPalindrome(string str) {
   string temp = str;
   reverse(str.begin(), str.end());
   return str == temp;
}
string formPalindromeStr(string A) {
   string B = A;
   reverse(A.begin(), A.end());
   A = A + B;
   if (isPalindrome(B))
      return B;
      return A;
}
string reverse(string input) {
   string temp = input;
   int left, right = 0;
   right = temp.length() - 1;
   for (left = 0; left < right; left++, right--)
   swap(temp[left], temp[right]);
   return temp;
}
int main(int argc, char const *argv[]) {
   string A = "Hello";
   cout << "The B is: " << formPalindromeStr(A);
}

出力

The B is: olleHHello

  1. 与えられた文字列の順列の数を見つけるためのC++プログラム

    文字列の文字をさまざまな順序で並べることができます。ここでは、特定の文字列から形成できる順列の数をカウントする方法を説明します。 1つの文字列が「abc」の場合はわかります。 3つの文字があります。 3つにアレンジできます! =6つの異なる方法。したがって、n文字の文字列は、nに配置できます。違う方法。しかし、aabのように同じ文字が複数回存在する場合、6つの順列はありません。 aba aab baa baa aab aba ここで、(1,6)、(2、5)、(3,4)は同じです。したがって、ここでは順列の数は3です。これは基本的に(n!)/(複数回発生しているす

  2. 各単語が回文であるように単語を分割する方法の数を見つけるためのC++プログラム

    ここでは、各単語が回文になるように単語を分割するいくつかの方法を見つけるためのC++プログラムについて説明します。 アルゴリズム Begin    Take the word as input.    Function partitionadd(vector<vector<string> > &u, string &s, vector<string> &tmp, int index):    if (index == 0)       tmp.c