C/C++ 中交替出現母音和子音的字串?
給定一個字串,重新排列字串中的字元,使得母音和子音佔據交替的位置。如果字串無法以上述方式重新排列,則列印“無法實現”。
母音之間的順序和子音之間的順序應該保持不變。
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;
}
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP