C ++中的替代元音和辅音字符串

对于给定的字符串,请重新排列给定字符串的字符,以使元音和辅音占据交替的位置。如果无法以正确的方式重新排列字符串,请显示“无此字符串”。元音彼此之间的顺序和辅音彼此之间的顺序应保留。

如果可以构造多个所需的字符串,则按字典顺序显示较小的字符串。

例子

Input : Tutorial
Output : Tutorila
Input : onse
Output : nose

存在两种可能的结果“鼻子”和“一个”。由于“鼻子”在字典上较小,因此我们将其显示出来。

  • 计算给定字符串中的元音和辅音数量。

  • 在这种情况下,如果计数之间的差大于一,则返回“不可能”。

  • 在这种情况下,如果元音比辅音多,请先显示第一个元音,然后再显示剩余的字符串。

  • 在这种情况下,如果辅音比元音多,则先显示第一个辅音,然后重复显示剩余的弦。

  • 在这种情况下,如果计数相同,则将第一个元音与第一个辅音进行比较,然后先显示较小的一个。

示例

// C++ application of alternate vowel and consonant string
#include <bits/stdc++.h>
using namespace std;
//是否将“ ch1”视为元音
bool isVowel(char ch1){
   if (ch1 == 'a' || ch1 == 'e' || ch1 == 'i' ||
   ch1 == 'o' || ch1 =='u')
   return true;
   return false;
}
//建立替代的元音和辅音字符串
//str1 [0 ... l2-1]和str2 [start ... l3-1]
string createAltStr(string str1, string str2,
int start1, int l1){
   string finalStr1 = "";
   //首先添加元音/辅音字符
   //然后添加辅音/元音字符
   for (int i=0, j=start1; j<l1; i++, j++)
   finalStr1 = (finalStr1 + str1.at(i)) + str2.at(j);
   return finalStr1;
}
//函数来查找或找到所需的备用元音和辅音字符串
string findAltStr(string str3){
   int nv1 = 0, nc1 = 0;
   string vstr1 = "", cstr1 = "";
   int l1 = str3.size();
   for (int i=0; i<l1; i++){
      char ch1 = str3.at(i);
      //计算元音和updaye元音字符串
      if (isVowel(ch1)){
      nv1++;
      vstr1 = vstr1 + ch1;
   }
   //计数辅音并更新辅音字符串
   else{
         nc1++;
         cstr1 = cstr1 + ch1;
      }
   }
   //无法建立这样的字符串
   if (abs(nv1-nc1) >= 2)
   return "no such string";
   //删除元音字符串的第一个字符
   //构建备用字符串
   //cstr1 [0 ... nc1-1]和vstr1 [1 ... nv1-1]
   if (nv1 > nc1)
   return (vstr1.at(0) + createAltStr(cstr1, vstr1, 1, nv1));
   //删除辅音字符串的第一个字符
   //构建备用字符串
   //vstr1 [0 ... nv1-1]和cstr1 [1 ... nc1-1]
   if (nc1 > nv1)
   return (cstr1.at(0) + createAltStr(vstr1, cstr1, 1, nc1));
   //如果元音和辅音
   //字符串长度相等
   //开始用辅音构建字符串
   if (cstr1.at(0) < vstr1.at(0))
   return createAltStr(cstr1, vstr1, 0, nv1);
   //用元音开始构建字符串
   return createAltStr(vstr1, cstr1, 0, nc1);
}
 //测试上面的驱动程序
int main(){
   string str3 = "Tutorial";
   cout<< findAltStr(str3);
   return 0;
}

输出结果

Tutorila

时间复杂度&减去O(n),其中“ n”被视为字符串的长度