給定一個字串,重新排列字串中的字符,使得元音和子音佔據交替的位置。如果字串不能按照上述方式重新排列,則列印「不可能」。
元音之間的順序和子音之間的順序應該保持不變。
Input: abce Output: abec
在計算字串中母音字母和子音字母的數量。
如果母音字母和子音字母的數量差超過1,則傳回「不可能」。
如果字串中元音字母的數量多於子音字母,則先列印第一個元音字母,然後對剩餘的字串進行遞歸。
如果字串中子音字母的數量多於母音字母,則先列印第一個子音字母,然後將剩餘的字串進行遞歸。
如果母音字母和子音字母的數量相同,則比較第一個母音字母和第一個子音字母,並先印出較小的。
#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; }#
以上是在C/C++中交替使用元音和子音字串的詳細內容。更多資訊請關注PHP中文網其他相關文章!