Print all subsequences of a string using Iterative Method in C++

C++Server Side ProgrammingProgramming

In this problem, we are given a string and we have to find the substring from the given string. The substring to be found should start with a vowel and end with constant character.

A string is an array of characters.

The substring that is to be generated in this problem can be generated by deleting some characters of the string. And without changing the order of the string.

Input: ‘abc’
Output: ab, ac, abc

To solve this problem, we will iterate the string and fix vowels and check for the next sequence. Let’s see an algorithm to find a solution −

Algorithm

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.

In the iterative approach, we will iterate over all string. From 1 to 2legth(string)−1.

Example

Live Demo

#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;
}

Output

The substring is −

w x y z wx wy wz xy xz yz wxy wxz wyz xyz wxyz
Published on 17-Jan-2020 10:51:55