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

長さMのすべての個別の円形文字列をC++で辞書式順序で印刷します


この問題では、文字列と整数Mが与えられます。タスクは、長さMのすべての個別の円形文字列を辞書式順序(アルファベット順)で印刷することです。

問題を理解するために例を見てみましょう

Input: str= “ssssn” M=3
Output: nss sns ssn sss

説明 −長さ3のすべての可能な円形ストリングは次のとおりです。ssssss ssnsnsnss。辞書式順序の異なる要素は、 sss ssnsnsnssです。

この問題を解決するために、文字列の要素を反復処理し、長さMのすべての可能なサブ文字列を生成します。この生成された文字列を、個別の要素のみを格納し、重複を破棄するセットに格納します。これらの要素を辞書式順序で格納します。セットのすべての要素を最初から印刷します。

このアルゴリズムは、サブストリングのサイズとストリングの長さの両方に依存します。時間計算量=O(N * M)

このコードは、ソリューションの実装を示しています-

#include <bits/stdc++.h>
using namespace std;
void printCircularString(string s, int l, int m) {
   set<string> circularString;
   s = s + s;
   for (int i = 0; i < l; i++) {
      circularString.insert(s.substr(i, m));
   }
   while (!circularString.empty()) {
      cout<<*circularString.begin()<<"\t";
      circularString.erase(circularString.begin());
   }
}
int main() {
   string str = "ssssn";
   int N = str.length();
   int M = 3;
   cout<<"All circular strings of length "<<M<<" from the string '"<<str<<"' are:\n";
   printCircularString(str, N, M);
   return 0;
}
出力
All circular strings of length 3 from the string 'ssssn' are −
nss sns ssn sss

  1. C++でブラケット形式の文字列を分割するすべての方法を印刷します

    この問題では、文字列が与えられ、それをサブ文字列に分割して、括弧で囲んで印刷する必要があります。 問題をよりよく理解するために、いくつかの例を見てみましょう。 Input : wxyz Output :    (w) (x) (y) (z)    (w) (x) (yz)    (w) (xy) (z)    (w) (xyz)    (wx) (y) (z)    (wx) (yz)    (wxy) (z)    (wxyz)

  2. C ++で1つの文字列を別の文字列にコピーせずに、文字列の配列をソートされた順序で出力します

    ある文字列を別の文字列にコピーせずに、並べ替えられた順序で文字列の配列を出力する問題では、文字列の配列を並べ替える必要があります。ここで、プログラマーはソート中に文字列を別の文字列にコピーすることはできません。 概念をよりよく理解するために例を見てみましょう: 例 − Input : {“Delhi”, “Hyderabad”, “Indore”, “Mumbai”, “Banglore”} Output : Banglore, Delhi, Hyderabad, In