एक दी गई स्ट्रिंग के मामले में, दी गई स्ट्रिंग के कैरेक्टर्स को पुनर्व्यवस्थित करें ताकि स्वर और व्यंजन वैकल्पिक स्थिति पर कब्जा करें। यदि स्ट्रिंग को उचित तरीके से पुनर्व्यवस्थित नहीं किया जा सकता है, तो "no such string" प्रदर्शित करें। एक-दूसरे के संबंध में स्वरों का क्रम और एक-दूसरे के संबंध में व्यंजनों का क्रम संरक्षित रहना चाहिए।
यदि एक से अधिक आवश्यक स्ट्रिंग्स बनाई जा सकती हैं, तो लेक्सिकोग्राफिकली छोटी वाली प्रदर्शित करें।
उदाहरण
इनपुट : Tutorial आउटपुट : Tutorila इनपुट : onse आउटपुट : nose
दो संभावित परिणाम "nose" और "ones" मौजूद हैं। चूंकि "nose" लेक्सिकोग्राफिकली छोटा है, हम इसे प्रदर्शित करते हैं।
दी गई स्ट्रिंग में स्वरों और व्यंजनों की संख्या गिनी जाती है।
इस मामले में, यदि गणना के बीच अंतर एक से अधिक है, तो "Not Possible" लौटाएं।
इस मामले में, यदि व्यंजनों से अधिक स्वर हैं, तो पहला स्वर पहले प्रदर्शित करें और शेष स्ट्रिंग के लिए पुनरावृत्ति करें।
इस मामले में, यदि स्वरों से अधिक व्यंजन हैं, तो पहला व्यंजन पहले प्रदर्शित करें और शेष स्ट्रिंग के लिए पुनरावृत्ति करें।
इस मामले में, यदि गणना समान है, तो पहले स्वर की तुलना पहले व्यंजन से करें और छोटे को पहले प्रदर्शित करें।
उदाहरण
// वैकल्पिक स्वर और व्यंजन स्ट्रिंग का C++ एप्लिकेशन #include <bits/stdc++.h> using namespace std; // 'ch1' को स्वर माना जाता है या नहीं bool isVowel(char ch1){ if (ch1 == 'a' || ch1 == 'e' || ch1 == 'i' || ch1 == 'o' || ch1 =='u') return true; return false; } // वैकल्पिक स्वर और व्यंजन स्ट्रिंग बनाएं // str1[0...l2-1] और str2[start...l3-1] string createAltStr(string str1, string str2, int start1, int l1){ string finalStr1 = ""; // पहले स्वर/व्यंजन का कैरेक्टर जोड़ें // फिर व्यंजन/स्वर का कैरेक्टर जोड़ें for (int i=0, j=start1; j<l1; i++, j++) finalStr1 = (finalStr1 + str1.at(i)) + str2.at(j); return finalStr1; } // आवश्यक वैकल्पिक स्वर और व्यंजन स्ट्रिंग खोजने के लिए फ़ंक्शन string findAltStr(string str3){ int nv1 = 0, nc1 = 0; string vstr1 = "", cstr1 = ""; int l1 = str3.size(); for (int i=0; i<l1; i++){ char ch1 = str3.at(i); // स्वरों की गिनती और स्वर स्ट्रिंग अपडेट करें if (isVowel(ch1)){ nv1++; vstr1 = vstr1 + ch1; } // व्यंजनों की गिनती और व्यंजन स्ट्रिंग अपडेट करें else{ nc1++; cstr1 = cstr1 + ch1; } } // ऐसी कोई स्ट्रिंग नहीं बनाई जा सकती if (abs(nv1-nc1) >= 2) return "no such string"; // स्वर स्ट्रिंग का पहला कैरेक्टर हटाएं // फिर cstr1[0...nc1-1] और vstr1[1...nv1-1] के साथ वैकल्पिक स्ट्रिंग बनाएं if (nv1 > nc1) return (vstr1.at(0) + createAltStr(cstr1, vstr1, 1, nv1)); // व्यंजन स्ट्रिंग का पहला कैरेक्टर हटाएं // फिर vstr1[0...nv1-1] और cstr1[1...nc1-1] के साथ वैकल्पिक स्ट्रिंग बनाएं if (nc1 > nv1) return (cstr1.at(0) + createAltStr(vstr1, cstr1, 1, nc1)); // यदि स्वर और व्यंजन दोनों // स्ट्रिंग्स समान लंबाई की हैं // व्यंजन से स्ट्रिंग बनाना शुरू करें if (cstr1.at(0) < vstr1.at(0)) return createAltStr(cstr1, vstr1, 0, nv1); // स्वर से स्ट्रिंग बनाना शुरू करें return createAltStr(vstr1, cstr1, 0, nc1); } // उपरोक्त का परीक्षण करने के लिए ड्राइवर प्रोग्राम int main(){ string str3 = "Tutorial"; cout<< findAltStr(str3); return 0; }आउटपुट
Tutorila
समय जटिलता O(n), जहां 'n' को स्ट्रिंग की लंबाई माना जाता है