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