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