इस समस्या में, हमें एक स्ट्रिंग दी गई है और हमें दी गई स्ट्रिंग से उपस्ट्रिंग ढूंढनी है। खोजी जाने वाली उपस्ट्रिंग को एक स्वर से शुरू और व्यंजन वर्ण पर समाप्त होना चाहिए।
एक स्ट्रिंग वर्णों की एक सरणी है।
इस समस्या में उत्पन्न की जाने वाली उपस्ट्रिंग को स्ट्रिंग के कुछ वर्णों को हटाकर उत्पन्न किया जा सकता है। और स्ट्रिंग के क्रम को बदले बिना।
इनपुट: 'abc' आउटपुट: ab, ac, abc
इस समस्या को हल करने के लिए, हम स्ट्रिंग पर पुनरावृति करेंगे और स्वरों को फिक्स करेंगे और अगले अनुक्रम की जांच करेंगे। आइए समाधान खोजने के लिए एक एल्गोरिदम देखें -
एल्गोरिदम
चरण 1: वेरिएबल i के साथ स्ट्रिंग के प्रत्येक वर्ण पर पुनरावृति करें। चरण 2: यदि iवां वर्ण एक स्वर है। चरण 3: यदि jवां वर्ण एक व्यंजन है। चरण 4: हैशसेट में जोड़ें, 1वें वर्ण से jवें वर्ण तक की उपस्ट्रिंग। चरण 5: स्ट्रिंग से उपस्ट्रिंग ढूंढने के लिए निम्नलिखित चरणों को दोहराएं।
उदाहरण
#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