在C ++中按字典顺序打印所有长度为M的不同圆形字符串

在这个问题中,我们给了一个字符串和一个整数M。我们的任务是按照字典顺序(字母顺序)打印所有长度为M的不同圆形字符串。

让我们举个例子来了解这个问题,

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

说明-所有可能的长度为3的圆形字符串为:sss sss ssn sns nss。按字典顺序排列的不同元素是sss ssn sns nss。

为了解决此问题,我们将遍历字符串的元素并生成所有可能的长度为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