Dada una string S que contiene solo letras mayúsculas, la tarea es encontrar el número mínimo de reemplazo de caracteres necesarios para obtener una string con todas las vocales y, si no podemos hacer la string requerida, imprima Impossible.
Ejemplos :
Input: str = "ABCDEFGHI" Output: AOUDEFGHI There are already 3 Vowels present in the string A, E, I we just change B and C to O and U respectively. Input: str = "ABC" Output: IMPOSSIBLE
Enfoque: dado que solo hay 5 vocales A, E, I, O, U. Entonces, si la longitud de la string es inferior a 5, siempre es imposible.
Para una string de longitud mayor que igual a 5, siempre es posible. Simplemente itere sobre cada carácter y reemplácelo con la vocal que no existe en la string. Si el carácter actual es una vocal y no se visitó antes, no cambiaremos el carácter a la vocal. Si todas las vocales ya están presentes desde el principio, no es necesario cambiar ningún carácter.
A continuación se muestra la implementación del enfoque anterior:
C++14
// C++14 implementation of the above approach #include <bits/stdc++.h> using namespace std; void addAllVowel(string str) { // All vowels char x[] = {'A', 'E', 'I', 'O', 'U'}; // List to store distinct vowels vector<char> y; int length = str.length(); // if length of string is less than 5 // then always Impossible if (length < 5) cout << "Impossible" << endl; else { // Storing the distinct vowels in the string // by checking if it in the list of string and not // in the list of distinct vowels for (int i = 0; i < length; i++) { if (find(x, x + 5, str[i]) != x + 5 and find(y.begin(), y.end(), str[i]) == y.end()) y.push_back(str[i]); } // Storing the vowels which are // not present in the string vector<char> z; for (int i = 0; i < 5; i++) if (find(y.begin(), y.end(), x[i]) == y.end()) z.push_back(x[i]); // No replacement needed condition if (z.empty()) cout << str << endl; else { int cc = 0; vector<char> y; // Replacing the characters to get all Vowels for (int i = 0; i < length; i++) { if (find(x, x + 5, str[i]) != x + 5 and find(y.begin(), y.end(), str[i]) == y.end()) y.push_back(str[i]); else { str[i] = z[cc]; cc++; } if (cc == z.size()) break; } cout << str << endl; } } } // Driver Code int main(int argc, char const *argv[]) { string str = "ABCDEFGHI"; addAllVowel(str); return 0; } // This code is contributed by // sanjeev2552
Java
// Java implementation of the above approach import java.util.*; class GFG { static boolean find(char x[], char c) { for(int i = 0; i < x.length; i++) if(x[i] == c) return true; return false; } static boolean find(Vector<Character> v,char c) { for(int i = 0; i < v.size(); i++) if(v.get(i) == c) return true; return false; } static void addAllVowel(String str) { // All vowels char x[] = {'A', 'E', 'I', 'O', 'U'}; // List to store distinct vowels Vector<Character> y = new Vector<>(); int length = str.length(); // if length of String is less than 5 // then always Impossible if (length < 5) System.out.println("Impossible"); else { // Storing the distinct vowels in the String // by checking if it in the list of String and not // in the list of distinct vowels for (int i = 0; i < length; i++) { if (find(x, str.charAt(i))&& !find(y, str.charAt(i))) y.add(str.charAt(i)); } // Storing the vowels which are // not present in the String Vector<Character> z = new Vector<>(); for (int i = 0; i < 5; i++) if (!find(y, x[i]) ) z.add(x[i]); // No replacement needed condition if (z.size() == 0) System.out.println( str ); else { int cc = 0; Vector<Character> y1 = new Vector<>(); String ans = ""; // Replacing the characters to get all Vowels for (int i = 0; i < length; i++) { if (find(x, str.charAt(i))&& !find(y1, str.charAt(i))) { ans += str.charAt(i); y1.add(str.charAt(i)); } else { ans += z.get(cc); cc++; } if (cc == z.size()) { //copy th rest of the string for(int j = i + 1; j < length; j++) ans += str.charAt(j); break; } } System.out.println(ans); } } } // Driver Code public static void main(String args[]) { String str = "ABCDEFGHI"; addAllVowel(str); } } // This code is contributed by Arnab Kundu
Python3
# Python3 implementation of the above approach s = "ABCDEFGHI" # converting String to a list S = list(s) # All vowels x = ["A", "E", "I", "O", "U"] # List to store distinct vowels y = [] le = len(S) if (le < 5): # if length of string is less than 5 then always # Impossible print("Impossible") else: # Storing the distinct vowels in the string # by checking if it in the list of string and not # in the list of distinct vowels for i in range(le): if (S[i] in x and S[i] not in y): y.append(S[i]) # Storing the vowels which are not present in the string z = [] for i in range(5): if (x[i] not in y): z.append(x[i]) if (len(z) == 0): # No replacement needed condition print(s) else: cc = 0 y = [] # Replacing the characters to get all Vowels for i in range(le): if (S[i] in x and S[i] not in y): y.append(S[i]) else: S[i] = z[cc] cc += 1 if (cc == len(z)): break print(*S, sep ="")
C#
// C# implementation of the above approach using System; using System.Collections; class GFG{ static bool find(char []x, char c) { for(int i = 0; i < x.Length; i++) if (x[i] == c) return true; return false; } static bool find(ArrayList v, char c) { for(int i = 0; i < v.Count; i++) if ((char)v[i] == c) return true; return false; } static void addAllVowel(string str) { // All vowels char []x = { 'A', 'E', 'I', 'O', 'U' }; // List to store distinct vowels ArrayList y = new ArrayList(); int length = str.Length; // If length of String is less than 5 // then always Impossible if (length < 5) Console.Write("Impossible"); else { // Storing the distinct vowels in // the String by checking if it in // the list of String and not // in the list of distinct vowels for(int i = 0; i < length; i++) { if (find(x, str[i]) && !find(y, str[i])) y.Add(str[i]); } // Storing the vowels which are // not present in the String ArrayList z = new ArrayList(); for(int i = 0; i < 5; i++) if (!find(y, x[i]) ) z.Add(x[i]); // No replacement needed condition if (z.Count == 0) Console.Write(str); else { int cc = 0; ArrayList y1 = new ArrayList(); string ans = ""; // Replacing the characters to // get all Vowels for(int i = 0; i < length; i++) { if (find(x, str[i]) && !find(y1, str[i])) { ans += str[i]; y1.Add(str[i]); } else { ans += (char)z[cc]; cc++; } if (cc == z.Count) { // Copy th rest of the string for(int j = i + 1; j < length; j++) ans += str[j]; break; } } Console.Write(ans); } } } // Driver Code public static void Main(string []args) { string str = "ABCDEFGHI"; addAllVowel(str); } } // This code is contributed by rutvik_56
Javascript
<script> // JavaScript implementation of the above approach function find(x,c) { for(let i = 0; i < x.length; i++) if(x[i] == c) return true; return false; } function addAllVowel(str) { // All vowels let x = ['A', 'E', 'I', 'O', 'U']; // List to store distinct vowels let y = []; let length = str.length; // if length of String is less than 5 // then always Impossible if (length < 5) document.write("Impossible<br>"); else { // Storing the distinct vowels in the String // by checking if it in the list of String and not // in the list of distinct vowels for (let i = 0; i < length; i++) { if (find(x, str[i])&& !find(y, str[i])) y.push(str[i]); } // Storing the vowels which are // not present in the String let z = []; for (let i = 0; i < 5; i++) if (!find(y, x[i]) ) z.push(x[i]); // No replacement needed condition if (z.length == 0) document.write( str+"<br>" ); else { let cc = 0; let y1 = []; let ans = ""; // Replacing the characters to get all Vowels for (let i = 0; i < length; i++) { if (find(x, str[i])&& !find(y1, str[i])) { ans += str[i]; y1.push(str[i]); } else { ans += z[cc]; cc++; } if (cc == z.length) { //copy th rest of the string for(let j = i + 1; j < length; j++) ans += str[j]; break; } } document.write(ans); } } } // Driver Code let str = "ABCDEFGHI"; addAllVowel(str); // This code is contributed by avanitrachhadiya2155 </script>
AOUDEFGHI
Complejidad de tiempo: O(N), donde N es el tamaño de la string
Espacio Auxiliar: O(N)