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

C++の特定の文字列内のすべてのパリンドロームサブシーケンスをカウントします


このチュートリアルでは、特定の文字列内のすべてのパリンドロームサブシーケンスの数を見つけるプログラムについて説明します。

このために、文字列が提供されます。私たちのタスクは、その特定の文字列で作成できるパリンドロームサブシーケンスの数を見つけることです。

#include<iostream>
#include<cstring>
using namespace std;
//returning total palindromic sequence
int count_palin(string str){
   int N = str.length();
   //creating a 2D array
   int cps[N+1][N+1];
   memset(cps, 0 ,sizeof(cps));
   for (int i=0; i<N; i++)
      cps[i][i] = 1;
   for (int L=2; L<=N; L++){
      for (int i=0; i<N; i++){
         int k = L+i-1;
         if (str[i] == str[k])
            cps[i][k] = cps[i][k-1] + cps[i+1][k] + 1;
         else
            cps[i][k] = cps[i][k-1] + cps[i+1][k] - cps[i+1][k-1];
      }
   }
   return cps[0][N-1];
}
int main(){
   string str = "abcb";
   cout << "Total palindromic subsequence are : " << count_palin(str) << endl;
   return 0;
}

出力

Total palindromic subsequence are : 6

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

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

  2. 特定の文字列のすべてのサブ文字列をC++で出力するプログラム

    このチュートリアルでは、特定の文字列のすべての部分文字列を出力するプログラムについて説明します。 このために、文字列または文字の配列が提供されます。私たちのタスクは、その特定の文字列のすべてのサブ文字列を出力することです。 例 #include<bits/stdc++.h> using namespace std; //printing all the substrings void print_substr(char str[], int n){    for (int len = 1; len <= n; len++){