使用 C++ 中的迭代方法列印字串的所有子序列
在本題中,我們有一個字串,我們需要從給定的字串中找到子字串。要找到的子字串應該以母音開頭,以子音結尾。
一個字串是一個字元陣列。
在本題中要生成的子字串可以透過刪除字串中的一些字元來生成。且不改變字串的順序。
Input: ‘abc’ Output: ab, ac, abc
為了解決此問題,我們將迭代字串並修復母音並檢查下一個序列。讓我們看一個尋找解決方案的演算法 -
演算法
Step 1: Iterate of each character of the string, with variable i. Step 2: If the ith character is a vowel. Step 3: If the jth character is a consonant. Step 4: Add to the HashSet, substring from 1st character to jth character. Step 5: Repeat the following steps and find substrings from the string.
在迭代方法中,我們將迭代所有字串。從 1 到 2legth(string)−1。
示例
#include <bits/stdc++.h> using namespace std; string subString(string s, int binary){ string sub = ""; int pos; while(binary>0){ pos=log2(binary&-binary)+1; sub=s[pos-1]+sub; binary= (binary & ~(1 << (pos-1))); } reverse(sub.begin(),sub.end()); return sub; } void findAllSubStrings(string s){ map<int, set<string> > sorted_subsequence; int len = s.size(); int limit = pow(2, len); for (int i = 1; i <= limit - 1; i++) { string sub = subString(s, i); sorted_subsequence[sub.length()].insert(sub); } for (auto it : sorted_subsequence) { for (auto ii : it.second) cout<<ii<<" "; cout<<"\t"; } } int main() { string s = "wxyz"; cout<<"The substring are :\n"; findAllSubStrings(s); return 0; }
輸出
子字串是 -
w x y z wx wy wz xy xz yz wxy wxz wyz xyz wxyz
廣告