Có một chuỗi cho trước, sắp xếp lại các ký tự trong chuỗi sao cho các nguyên âm và phụ âm chiếm vị trí thay thế. Nếu không thể sắp xếp lại chuỗi theo cách trên, hãy in “không thể”.
Thứ tự của các nguyên âm đối với nhau và thứ tự của các phụ âm đối với nhau cần được duy trì.
Input: abce Output: abec
Giải thích
-
Tìm số nguyên âm và phụ âm trong chuỗi.
-
Nếu sự khác biệt giữa không. các nguyên âm và phụ âm nhiều hơn một, trả về "Không thể".
-
Nếu có điều kiện là trong chuỗi có nhiều nguyên âm hơn phụ âm, hãy in nguyên âm đầu tiên và lặp lại cho chuỗi còn lại.
-
Nếu có điều kiện là nhiều phụ âm xuất hiện trong chuỗi hơn số nguyên âm, hãy in phụ âm đầu tiên và lặp lại cho chuỗi còn lại.
-
Nếu không. của các nguyên âm và phụ âm giống nhau, hãy so sánh nguyên âm đầu tiên với phụ âm đầu tiên và in cái nhỏ hơn trước
Ví dụ
#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; }