একটি স্ট্রিং দেওয়া আছে, স্ট্রিংটিতে অক্ষরগুলিকে এমনভাবে সাজান যাতে স্বরবর্ণ এবং ব্যঞ্জনবর্ণগুলি বিকল্প অবস্থানে থাকে। যদি উপরের পদ্ধতিতে স্ট্রিং পুনরায় সাজানো না যায়, তাহলে "সম্ভব নয়" প্রিন্ট করুন।
একে অপরের প্রতি সম্মানের সাথে স্বরবর্ণের ক্রম এবং একে অপরের প্রতি সম্মানের সাথে ব্যঞ্জনবর্ণের ক্রম বজায় রাখা উচিত।
Input: abce Output: abec
ব্যাখ্যা
-
স্ট্রিংটিতে স্বরবর্ণ এবং ব্যঞ্জনবর্ণের সংখ্যা খুঁজুন।
-
না এর মধ্যে পার্থক্য থাকলে। স্বরবর্ণ এবং ব্যঞ্জনবর্ণ একাধিক, "সম্ভব নয়" ফেরত দিন।
-
যদি এমন একটি শর্ত থাকে যে ব্যঞ্জনবর্ণের চেয়ে বেশি স্বরবর্ণ স্ট্রিংটিতে উপস্থিত থাকে, তবে প্রথম স্বরবর্ণটি প্রথমে প্রিন্ট করুন এবং অবশিষ্ট স্ট্রিংয়ের জন্য পুনরাবৃত্তি করুন৷
-
যদি এমন একটি শর্ত থাকে যে স্ট্রিংটিতে স্বরবর্ণের চেয়ে বেশি ব্যঞ্জনবর্ণ উপস্থিত থাকে, তবে প্রথম ব্যঞ্জনবর্ণটি প্রথমে প্রিন্ট করুন এবং অবশিষ্ট স্ট্রিংয়ের জন্য পুনরাবৃত্তি করুন৷
-
যদি না. স্বরবর্ণ এবং ব্যঞ্জনবর্ণ একই, প্রথম ব্যঞ্জনবর্ণের সাথে প্রথম স্বরবর্ণের তুলনা করুন এবং প্রথমে ছোটটি প্রিন্ট করুন
উদাহরণ
#include <iostream> using namespace std; bool isVowel(char ch) { if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch =='u') return true; return false; } string createAltStr(string str1, string str2, int start, int l) { string finalStr = ""; for (int i=0, j=start; j<l; i++, j++) finalStr = (finalStr + str1.at(i)) + str2.at(j); return finalStr; } string findAltStr(string str) { int nv = 0, nc = 0; string vstr = "", cstr = ""; int l = str.size(); for (int i=0; i<l; i++) { char ch = str.at(i); if (isVowel(ch)) { nv++; vstr = vstr + ch; } else { nc++; cstr = cstr + ch; } } if (abs(nv-nc) >= 2) return "no such string"; if (nv > nc) return (vstr.at(0) + createAltStr(cstr, vstr, 1, nv)); if (nc > nv) return (cstr.at(0) + createAltStr(vstr, cstr, 1, nc)); if (cstr.at(0) < vstr.at(0)) return createAltStr(cstr, vstr, 0, nv); return createAltStr(vstr, cstr, 0, nc); } int main() { string str = "abde"; cout << findAltStr(str); return 0; }