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

更新於: 2020-01-22

170 次瀏覽

開啟你的 事業

完成課程便可獲得認證

開始學習
廣告
© . All rights reserved.