Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

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.

예시

#include <bits/stdc++.h>
using namespace std;
set<string> st;
bool isaVowel(char c);
bool isaConsonant(char c);
void findSubSequence(string str);
int main(){
   string s = "abekns";
   findSubSequence(s);
   cout<<"The substring generated are :\n";
   for (auto i : st)
      cout<<i<<" ";
   cout << endl;
   return 0;
}
bool isaVowel(char c) {
   return (c=='a'||c=='e'||c=='i'||c=='o'||c=='u');
}
bool isaConsonant(char c) {
   return !isaVowel(c);
}
void findSubSequence(string str) {
   for (int i = 0; i < str.length(); i++) {
      if (isaVowel(str[i])) {
         for (int j = str.length() - 1; j >= i; j--) {
            if (isaConsonant(str[j])) {
               string str_sub = str.substr(i, j + 1);
               st.insert(str_sub);
               for (int k = 1; k < str_sub.length() - 1; k++){
                  string sb = str_sub;
                  sb.erase(sb.begin() + k);
                  findSubSequence(sb);
               }
            }
         }
      }
   }
}

출력

생성된 하위 문자열은 -

ab abek abekn abekns abeks aben abens abes abk abkn abkns abks abn abns abs aek aekn aekns aeks aen aens aes ak akn akns aks an ans as ek ekn ekns eks en ens es