Computer >> Máy Tính >  >> Lập trình >> C ++

In tất cả các chuỗi con của một chuỗi bằng phương pháp lặp lại trong C ++


Trong bài toán này, chúng ta được cung cấp một chuỗi và chúng ta phải tìm chuỗi con từ chuỗi đã cho. Chuỗi con được tìm thấy phải bắt đầu bằng một ký tự nguyên âm và hằng số tận cùng.

Một chuỗi là một mảng các ký tự.

Chuỗi con sẽ được tạo trong vấn đề này có thể được tạo bằng cách xóa một số ký tự của chuỗi. Và không thay đổi thứ tự của chuỗi.

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

Để giải quyết vấn đề này, chúng tôi sẽ lặp lại chuỗi và sửa các nguyên âm và kiểm tra chuỗi tiếp theo. Hãy xem một thuật toán để tìm ra giải pháp -

Thuật toán

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.

Trong cách tiếp cận lặp lại, chúng tôi sẽ lặp lại trên tất cả chuỗi. Từ 1 đến 2 legth (string) −1.

Ví dụ

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

Đầu ra

Chuỗi con là -

w x y z wx wy wz xy xz yz wxy wxz wyz xyz wxyz