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

更新于: 17-1-2020

335 次浏览

开启职业生涯

完成课程获得认证

入门
广告