Cuerda alterna de vocales y consonantes

Dada una string, reorganizar los caracteres de la string dada de modo que las vocales y las consonantes ocupen posiciones alternas. Si la string no se puede reorganizar de la manera deseada, imprima «no such string». Debe mantenerse el orden de las vocales entre sí y el orden de las consonantes entre sí. 
Si se puede formar más de una string requerida, imprima la lexicográficamente más pequeña.

Ejemplos: 

Input : geeks
Output : gekes

Input : onse
Output : nose
There are two possible outcomes
"nose" and "ones".  Since "nose"
is lexicographically smaller, we 
print it.
  1. Cuente el número de vocales y consonantes en una string dada.
  2. Si la diferencia entre los conteos es más de uno, devuelve «No es posible».
  3. Si hay más vocales que consonantes, escriba primero la primera vocal y repita para la string restante.
  4. Si hay más consonantes que vocales, escriba primero la primera consonante y repítala para la string restante.
  5. Si el número es el mismo, compare la primera vocal con la primera consonante y escriba primero la más pequeña.

Implementación:

C++

// C++ implementation of alternate vowel and
// consonant string
#include <bits/stdc++.h>
using namespace std;
 
// 'ch' is vowel or not
bool isVowel(char ch)
{
    if (ch == 'a' || ch == 'e' || ch == 'i' ||
            ch == 'o' || ch =='u')
        return true;
    return false;
}
 
// create alternate vowel and consonant string
// str1[0...l1-1] and str2[start...l2-1]
string createAltStr(string str1, string str2,
                    int start, int l)
{
    string finalStr = "";
 
    // first adding character of vowel/consonant
    // then adding character of consonant/vowel
    for (int i=0, j=start; j<l; i++, j++)
        finalStr = (finalStr + str1.at(i)) + str2.at(j);
    return finalStr;
}
 
// function to find the required
// alternate vowel and consonant string
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);
 
        // count vowels and update vowel string
        if (isVowel(ch))
        {
            nv++;
            vstr = vstr + ch;
        }
 
        // count consonants and update consonant
        // string
        else
        {
            nc++;
            cstr = cstr + ch;
        }
    }
 
    // no such string can be formed
    if (abs(nv-nc) >= 2)
        return "no such string";
 
    // remove first character of vowel string
    // then create alternate string with
    // cstr[0...nc-1] and vstr[1...nv-1]
    if (nv > nc)
        return (vstr.at(0) + createAltStr(cstr, vstr, 1, nv));
 
    // remove first character of consonant string
    // then create alternate string with
    // vstr[0...nv-1] and cstr[1...nc-1]
    if (nc > nv)
        return (cstr.at(0) + createAltStr(vstr, cstr, 1, nc));
 
    // if both vowel and consonant
    // strings are of equal length
    // start creating string with consonant
    if (cstr.at(0) < vstr.at(0))
        return createAltStr(cstr, vstr, 0, nv);
 
    // start creating string with vowel
    return createAltStr(vstr, cstr, 0, nc);
}
 
// Driver program to test above
int main()
{
    string str = "geeks";
    cout << findAltStr(str);
    return 0;
}

Java

// Java implementation of alternate vowel and
// consonant string
import java.util.*;
 
class GFG
{
 
// 'ch' is vowel or not
static boolean isVowel(char ch)
{
    if (ch == 'a' || ch == 'e' || ch == 'i' ||
            ch == 'o' || ch =='u')
        return true;
    return false;
}
 
// create alternate vowel and consonant string
// str1[0...l1-1] and str2[start...l2-1]
static String createAltStr(String str1, String str2,
                    int start, int l)
{
    String finalStr = "";
 
    // first adding character of vowel/consonant
    // then adding character of consonant/vowel
    for (int i = 0, j = start; j < l; i++, j++)
        finalStr = (finalStr + str1.charAt(i)) +
                                    str2.charAt(j);
    return finalStr;
}
 
// function to find the required
// alternate vowel and consonant string
static String findAltStr(String str)
{
    int nv = 0, nc = 0;
    String vstr = "", cstr = "";
    int l = str.length();
    for (int i = 0; i < l; i++)
    {
        char ch = str.charAt(i);
 
        // count vowels and update vowel string
        if (isVowel(ch))
        {
            nv++;
            vstr = vstr + ch;
        }
 
        // count consonants and update consonant
        // string
        else
        {
            nc++;
            cstr = cstr + ch;
        }
    }
 
    // no such string can be formed
    if (Math.abs(nv - nc) >= 2)
        return "no such string";
 
    // remove first character of vowel string
    // then create alternate string with
    // cstr[0...nc-1] and vstr[1...nv-1]
    if (nv > nc)
        return (vstr.charAt(0) + createAltStr(cstr, vstr, 1, nv));
 
    // remove first character of consonant string
    // then create alternate string with
    // vstr[0...nv-1] and cstr[1...nc-1]
    if (nc > nv)
        return (cstr.charAt(0) + createAltStr(vstr, cstr, 1, nc));
 
    // if both vowel and consonant
    // strings are of equal length
    // start creating string with consonant
    if (cstr.charAt(0) < vstr.charAt(0))
        return createAltStr(cstr, vstr, 0, nv);
 
    // start creating string with vowel
    return createAltStr(vstr, cstr, 0, nc);
}
 
// Driver code
public static void main(String args[])
{
    String str = "geeks";
    System.out.println(findAltStr(str));
}
}
 
// This code is contributed by
// Shashank_Sharma

Python 3

# Python implementation of alternate vowel
# and consonant string
 
# 'ch' is vowel or not
def isVowel(ch):
    if(ch == 'a' or ch == 'e' or
       ch == 'i' or ch == 'o' or
       ch == 'u'):
        return True
    return False
 
# create alternate vowel and consonant string
# str1[0...l1-1] and str2[start...l2-1]
def createAltStr(str1, str2, start, l):
    finalStr = ""
    i = 0
     
    # first adding character of vowel/consonant
    # then adding character of consonant/vowel
    for j in range(start, l):
        finalStr = (finalStr + str1[i]) + str2[j]
        i + 1
 
    return finalStr
 
# function to find the required
# alternate vowel and consonant string
def findAltStr(str1):
    nv = 0
    nc = 0
    vstr = ""
    cstr = ""
    l = len(str1)
    for i in range(0, l):
         
        # count vowels and update vowel string
        if(isVowel(str1[i])):
            nv += 1
            vstr = vstr + str1[i]
             
        # count consonants and update
        # consonant string
        else:
            nc += 1
            cstr = cstr + str1[i]
             
    # no such string can be formed
    if(abs(nv - nc) >= 2):
        return "no such string"
     
    # remove first character of vowel string
    # then create alternate string with
    # cstr[0...nc-1] and vstr[1...nv-1]
    if(nv > nc):
        return (vstr[0] + createAltStr(cstr, vstr, 1, nv))
     
    # remove first character of consonant string
    # then create alternate string with
    # vstr[0...nv-1] and cstr[1...nc-1]
    if(nc > nv):
        return (cstr[0] + createAltStr(vstr, cstr, 1, nc))
     
    # if both vowel and consonant
    # strings are of equal length
    # start creating string with consonant
    if(cstr[0] < vstr[0]):
        return createAltStr(cstr, vstr, 0, nv)
 
    return createAltStr(vstr, cstr, 0, nc)
         
# Driver Code
if __name__ == "__main__":
    str1 = "geeks"
    print(findAltStr(str1))
 
# This code is contributed by Sairahul099

C#

// C# implementation of alternate vowel and
// consonant string
using System;
 
class GFG
{
 
// 'ch' is vowel or not
static Boolean isVowel(char ch)
{
    if (ch == 'a' || ch == 'e' || ch == 'i' ||
            ch == 'o' || ch =='u')
        return true;
    return false;
}
 
// create alternate vowel and consonant string
// str1[0...l1-1] and str2[start...l2-1]
static String createAltStr(String str1, String str2,
                    int start, int l)
{
    String finalStr = "";
 
    // first adding character of vowel/consonant
    // then adding character of consonant/vowel
    for (int i = 0, j = start; j < l; i++, j++)
        finalStr = (finalStr + str1[i]) +
                                    str2[j];
    return finalStr;
}
 
// function to find the required
// alternate vowel and consonant string
static String findAltStr(String str)
{
    int nv = 0, nc = 0;
    String vstr = "", cstr = "";
    int l = str.Length;
    for (int i = 0; i < l; i++)
    {
        char ch = str[i];
 
        // count vowels and update vowel string
        if (isVowel(ch))
        {
            nv++;
            vstr = vstr + ch;
        }
 
        // count consonants and update consonant
        // string
        else
        {
            nc++;
            cstr = cstr + ch;
        }
    }
 
    // no such string can be formed
    if (Math.Abs(nv - nc) >= 2)
        return "no such string";
 
    // remove first character of vowel string
    // then create alternate string with
    // cstr[0...nc-1] and vstr[1...nv-1]
    if (nv > nc)
        return (vstr[0] + createAltStr(cstr, vstr, 1, nv));
 
    // remove first character of consonant string
    // then create alternate string with
    // vstr[0...nv-1] and cstr[1...nc-1]
    if (nc > nv)
        return (cstr[0] + createAltStr(vstr, cstr, 1, nc));
 
    // if both vowel and consonant
    // strings are of equal length
    // start creating string with consonant
    if (cstr[0] < vstr[0])
        return createAltStr(cstr, vstr, 0, nv);
 
    // start creating string with vowel
    return createAltStr(vstr, cstr, 0, nc);
}
 
// Driver code
public static void Main(String []args)
{
    String str = "geeks";
    Console.WriteLine(findAltStr(str));
}
}
 
// This code is contributed by Princi Singh

Javascript

<script>
 
// JavaScript implementation of alternate vowel and
// consonant string
 
// 'ch' is vowel or not
function isVowel(ch)
{
    if (ch == 'a' || ch == 'e' || ch == 'i' ||
            ch == 'o' || ch =='u')
        return true;
    return false;
}
 
// create alternate vowel and consonant string
// str1[0...l1-1] and str2[start...l2-1]
function createAltStr(str1, str2,start,l)
{
    let finalStr = "";
 
    // first adding character of vowel/consonant
    // then adding character of consonant/vowel
    for (let i=0, j=start; j<l; i++, j++)
        finalStr = (finalStr + str1[i] + str2[j]);
    return finalStr;
}
 
// function to find the required
// alternate vowel and consonant string
function findAltStr(str)
{
    let nv = 0, nc = 0;
    let vstr = "", cstr = "";
    let l = str.length;
    for (let i=0; i<l; i++)
    {
        let ch = str[i];
 
        // count vowels and update vowel string
        if (isVowel(ch))
        {
            nv++;
            vstr = vstr + ch;
        }
 
        // count consonants and update consonant
        // string
        else
        {
            nc++;
            cstr = cstr + ch;
        }
    }
 
    // no such string can be formed
    if (Math.abs(nv-nc) >= 2)
        return "no such string";
 
    // remove first character of vowel string
    // then create alternate string with
    // cstr[0...nc-1] and vstr[1...nv-1]
    if (nv > nc)
        return (vstr[0] + createAltStr(cstr, vstr, 1, nv));
 
    // remove first character of consonant string
    // then create alternate string with
    // vstr[0...nv-1] and cstr[1...nc-1]
    if (nc > nv)
        return (cstr[0] + createAltStr(vstr, cstr, 1, nc));
 
    // if both vowel and consonant
    // strings are of equal length
    // start creating string with consonant
    if (cstr.at(0) < vstr.at(0))
        return createAltStr(cstr, vstr, 0, nv);
 
    // start creating string with vowel
    return createAltStr(vstr, cstr, 0, nc);
}
 
// Driver program to test above
let str = "geeks";
document.write(findAltStr(str));
 
// This code is contributed by Shinjan_Patra
</script>
Producción

gekes

Complejidad de tiempo: O(n), donde ‘n’ es la longitud de la string
Espacio auxiliar: O(n), donde ‘n’ es la longitud de la string. 

Este artículo es una contribución de Ayush Jauhari . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *