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

各単語が回文であるように単語を分割する方法の数を見つけるための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.clear()
   for i = index to length-1
      st = st + s[i]
      if (checkPalin(st))
         tmp.push_back(st)
         if (i+1 < length)
            partitionadd(u, s, tmp, i+1)
         else
            u.push_back(tmp)
               tmp = curr
   return
End
Begin
   Function partition(string st, vector<vector<string> >&u):
      vector<string> tmp
      addStrings(u, st, tmp, 0)
      printSol(u) //to print the solution
   return
End

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

bool checkPalin(string s) { //check if string is palindrome or not.
   int length = s.length();
   length--;
   for (int i=0; i<length; i++) {
      if (s[i] != s[length])
      return false;
      length--;
   }
   return true;
}
void printSol(vector<vector<string> > part) { //print the solution
   for (int i = 0; i < part.size(); ++i) {
      for(int j = 0; j < part[i].size(); ++j)
      cout << part[i][j] << " ";
      cout << endl;
   }
   return;
}
void partitionadd(vector<vector<string> > &u, string &s, vector<string> &tmp, int index) {
   int length = s.length(); //store length of the string
   string st;
   vector<string> curr = tmp;
   // goes through all indexes and recursively add remaining partitions if current string is palindrome.
   if (index == 0)
   tmp.clear();
   for (int i = index; i < length; ++i) {
      st = st + s[i];
      if (checkPalin(st)) {
         tmp.push_back(st);
         if (i+1 < length)
            partitionadd(u,s,tmp,i+1);
         else
            u.push_back(tmp);
         tmp = curr;
      }
   }
   return;
}
void partition(string st, vector<vector<string> >&u) //generate all palindromic partitions of 'str' and stores the result in 'm'. {
   vector<string> tmp;
   addStrings(u, st, tmp, 0);
   printSol(u);
   return;
}
int main() {
   string s = "tutorials";
   vector<vector<string> > part;
   cout<<"the number of partitions:"<<endl;
   partition(s, part);
   return 0;
}

出力

the number of partitions:
t u t o r i a l s
tut o r i a l s

  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. Pythonで文字列を分割する方法の数を見つけるためのプログラム

    バイナリ文字列sがあるとすると、sを3つの空でない文字列s1、s2、s3に分割して(s1連結s2連結s3 =s)することができます。文字数「1」がs1、s2、およびs3で同じになるように、sを分割できる方法の数を見つける必要があります。答えは非常に大きい可能性があるため、答えmod 10 ^ 9+7を返します。 したがって、入力がs =11101011の場合、出力は2になります。これは、「11 | 1010|11」と「11|101|011」のように分割できるためです。 これを解決するには、次の手順に従います。 count:=sの1の数を数える m:=10 ^ 9 + 7 ans: