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.
- Cuente el número de vocales y consonantes en una string dada.
- Si la diferencia entre los conteos es más de uno, devuelve «No es posible».
- Si hay más vocales que consonantes, escriba primero la primera vocal y repita para la string restante.
- Si hay más consonantes que vocales, escriba primero la primera consonante y repítala para la string restante.
- 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>
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