एक स्ट्रिंग दी गई है, कार्य दी गई स्ट्रिंग में मौजूद सभी स्वरों को उल्टा करना है। उदाहरण के लिए,
इनपुट-1 -
a = "tutor"
आउटपुट -
totur
व्याख्या - स्ट्रिंग "tutor" को उल्टा करने पर आउटपुट "totur" उत्पन्न होगा।
इनपुट-2 -
a = "mathematics"
आउटपुट -
mithametacs
व्याख्या - स्ट्रिंग "mathematics" को उल्टा करने पर आउटपुट "mithametacs" उत्पन्न होगा।
इस प्रॉब्लम को हल करने का दृष्टिकोण
एक स्ट्रिंग दी गई है, हमें इसमें मौजूद सभी स्वरों को उल्टा करना है। इस विशेष प्रॉब्लम को हल करने के कई दृष्टिकोण हैं लेकिन हमें इसे रैखिक समय O(n) में हल करना है।
इस प्रकार, इस प्रॉब्लम को हल करने की बेहतर विधि टू-पॉइंटर दृष्टिकोण का उपयोग करना है जिसमें हम दो पॉइंटर्स लो और हाई लेंगे जो प्रारंभ में बाएं-मोस्ट तत्व और दाएं-मोस्ट तत्व की ओर इशारा करेंगे। दो नेस्टेड लूप्स में, हम जांचेंगे कि क्या बायां-मोस्ट वर्ण स्वर है और दायां-मोस्ट वर्ण भी स्वर है तो तत्व को स्वैप करें और राइट पॉइंटर को आगे बढ़ाएं।
एक स्ट्रिंग का इनपुट लें।
एक बूलियन फंक्शन यह जांचने के लिए कि वर्ण स्वर है या नहीं।
एक फंक्शन reverseVowel(string &str) एक स्ट्रिंग को इनपुट के रूप में लेता है और स्ट्रिंग में मौजूद स्वरों को उल्टा करता है।
दो पॉइंटर्स लो और हाई इनिशियलाइज़ करें जो क्रमशः '0' और अंतिम वर्ण की ओर इशारा करते हैं।
बाएं-मोस्ट और दाएं-मोस्ट वर्णों की जांच करें यदि वे स्वर हैं तो वर्ण को इन-प्लेस स्वैप करें और राइटमोस्ट पॉइंटर को घटाएं।
चरणों को तब तक दोहराएं जब तक स्ट्रिंग के सभी वर्ण विज़िट न हो जाएं।
उदाहरण
#include <bits/stdc++.h>
using namespace std;
bool isVowel(char ch) {
return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' ||
ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U';
}
string reverseVowel(string &s) {
int low = 0;
int high = s.size() - 1;
while (low < high) {
while (low < high && !isVowel(s[low])) {
low++;
}
while (low < high && !isVowel(s[high])) {
high--;
}
swap(s[low++], s[high--]);
}
return s;
}
int main() {
string a = "tutorialspoint";
string ans = reverseVowel(a);
cout << ans;
return 0;
}
आउटपुट
उपरोक्त कोड चलाने पर निम्न आउटपुट उत्पन्न होगा,
titorailspount
चूंकि दी गई स्ट्रिंग "tutorialspoint" में स्वर हैं, स्वरों को उल्टा करने के बाद, यह आउटपुट के रूप में "titorailspount" उत्पन्न करेगा।