使用 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
广告