Dada una string S , la tarea es contar el número de posiciones en las que se deben mover las vocales de modo que todas las consonantes se coloquen al frente y todas las vocales al final. El orden de las consonantes y las vocales en la nueva string debe ser el mismo.
Ejemplos:
Entrada: S = “abcdefghi”
Salida: 9
Explicación:
Las consonantes presentes en la string son b, c, d, f, g y h y las vocales son a, e e i. Al reorganizar, la string final resulta ser «bcdfghaei» y el orden de las consonantes y las vocales no cambia.
Inicialmente ‘a’ estaba en el índice 0 y finalmente se movió al índice 6. Nº de posiciones movidas = 6 – 0 = 6.
Inicialmente ‘e’ estaba en el índice 4 y finalmente se movió al índice 7. Nº de posiciones movidas = 7 – 4 = 3.
Inicialmente, ‘i’ estaba en el índice 8 y no cambió su posición. Así que no. de movimientos = 0.
Número total de posiciones movidas = 6 + 3 + 0 = 9.
Entrada: S = “iijedf”
Salida: 8
Explicación:
Las consonantes presentes en la string son j, d y f y las vocales son i, i y e. Al reorganizar, la string final resulta ser «jdfiie» y el orden de las consonantes y las vocales no cambia.
‘i’ en el índice 0 se mueve al índice 3. Nº de posiciones movidas = 3 – 0 = 3.
‘i’ en el índice 1 se mueve al índice 4. Nº de posiciones movidas = 4 – 1 = 3.
‘e ‘ en el índice 3 se mueve al índice 5. Número de posiciones movidas = 5 – 3 = 2.
Número total de posiciones movidas = 3 + 3 + 2 = 8.
Acercarse:
- Cree las strings vacías de vocales y consonantes para almacenar las vocales y consonantes de la string dada.
- Atraviese la string S dada y, si el carácter actual es una vocal, agréguelo a la string de vocales ; de lo contrario, agréguelo a la string de consonantes .
- Almacene la concatenación de las strings de consonantes y vocales en la string ans .
- Inicialice 2 punteros p1 y p2 de modo que p1 apunte al primer índice de S y p2 apunte al índice donde aparece la primera vocal en la string ans .
- Inicialice una variable de contador cnt a 0.
- Cada vez que el carácter en el índice p1 coincida con el carácter en el índice p2, agregue el valor de p2 – p1 a cnt e incremente los valores de p1 y p2 en 1.
- Repita el paso 6 para cada índice hasta alcanzar el último índice de ans .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to check whether a character // is vowel or not bool isvowel(char x) { if (x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u' || x == 'A' || x == 'E' || x == 'I' || x == 'O' || x == 'U') return true; else return false; } // Function that creates a new string // such that all consonants are at // the front of the string void movetofront(string s) { // To store the vowels and // consonants in the same order string vowels, consonants; // To store the resultant string string ans; vowels = consonants = ans = ""; for (int i = 0; s[i]; i++) { // Check if s[i] is vowel if (isvowel(s[i])) { vowels += s[i]; } // Else s[i] is consonant else { consonants += s[i]; } } // concatenate the strings formed ans = consonants + vowels; // Pointer variables int p1 = 0; int p2 = consonants.size(); // Counter variable int cnt = 0; // Condition to check if the // given string has only // consonants if (p2 == ans.size()) { cout << 0 << endl; return; } // Condition to check if the // string has only vowels if (ans.size() == vowels.size()) { cout << 0 << endl; return; } // Loop to find the count of // number of positions moved while (p2 < ans.size()) { if (ans[p2] == s[p1]) { cnt += p2 - p1; p1++; p2++; } else { p1++; } } cout << cnt << endl; return; } // Driver Code int main() { // Given string string s = "abcdefghi"; // Function Call movetofront(s); return 0; }
Java
// Java program for the above approach import java.util.*; class GFG{ // Function to check whether a character // is vowel or not static boolean isvowel(char x) { if (x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u' || x == 'A' || x == 'E' || x == 'I' || x == 'O' || x == 'U') return true; else return false; } // Function that creates a new String // such that all consonants are at // the front of the String static void movetofront(String s) { // To store the vowels and // consonants in the same order String vowels, consonants; // To store the resultant String String ans; vowels = consonants = ans = ""; for (int i = 0; i < s.length(); i++) { // Check if s.charAt(i) is vowel if (isvowel(s.charAt(i))) { vowels += s.charAt(i); } // Else s.charAt(i) is consonant else { consonants += s.charAt(i); } } // concatenate the Strings formed ans = consonants + vowels; // Pointer variables int p1 = 0; int p2 = consonants.length(); // Counter variable int cnt = 0; // Condition to check if the // given String has only // consonants if (p2 == ans.length()) { System.out.print(0 + "\n"); return; } // Condition to check if the // String has only vowels if (ans.length() == vowels.length()) { System.out.print(0 + "\n"); return; } // Loop to find the count of // number of positions moved while (p2 < ans.length()) { if (ans.charAt(p2) == s.charAt(p1)) { cnt += p2 - p1; p1++; p2++; } else { p1++; } } System.out.print(cnt + "\n"); return; } // Driver Code public static void main(String[] args) { // Given String String s = "abcdefghi"; // Function Call movetofront(s); } } // This code is contributed by sapnasingh4991
Python3
# Python3 program for the above approach # Function to check whether a character # is vowel or not def isvowel(x): if (x == 'a' or x == 'e' or x == 'i' or x == 'o' or x == 'u' or x == 'A' or x == 'E' or x == 'I' or x == 'O' or x == 'U'): return bool(True) else: return bool(False) # Function that creates a new string # such that all consonants are at # the front of the string def movetofront(s): # To store the vowels and # consonants in the same order vowels = consonants = ans = "" for i in range(len(s)): # Check if s[i] is vowel if (isvowel(s[i])): vowels += s[i] # Else s[i] is consonant else: consonants += s[i] # concatenate the strings formed ans = consonants + vowels # Pointer variables p1 = 0 p2 = len(consonants) # Counter variable cnt = 0 # Condition to check if the # given string has only # consonants if (p2 == len(ans)): print(0) return # Condition to check if the # string has only vowels if (len(ans) == len(vowels)): print(0) return # Loop to find the count of # number of positions moved while (p2 < len(ans)): if (ans[p2] == s[p1]): cnt += p2 - p1 p1 += 1 p2 += 1 else: p1 += 1 print(cnt) return # Driver code # Given string s = "abcdefghi" # Function call movetofront(s) # This code is contributed by divyeshrabadiya07
C#
// C# program for the above approach using System; class GFG{ // Function to check whether a character // is vowel or not static bool isvowel(char x) { if (x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u' || x == 'A' || x == 'E' || x == 'I' || x == 'O' || x == 'U') return true; else return false; } // Function that creates a new String // such that all consonants are at // the front of the String static void movetofront(String s) { // To store the vowels and // consonants in the same order String vowels, consonants; // To store the resultant String String ans; vowels = consonants = ans = ""; for (int i = 0; i < s.Length; i++) { // Check if s[i] is vowel if (isvowel(s[i])) { vowels += s[i]; } // Else s[i] is consonant else { consonants += s[i]; } } // concatenate the Strings formed ans = consonants + vowels; // Pointer variables int p1 = 0; int p2 = consonants.Length; // Counter variable int cnt = 0; // Condition to check if the // given String has only // consonants if (p2 == ans.Length) { Console.Write(0 + "\n"); return; } // Condition to check if the // String has only vowels if (ans.Length == vowels.Length) { Console.Write(0 + "\n"); return; } // Loop to find the count of // number of positions moved while (p2 < ans.Length) { if (ans[p2] == s[p1]) { cnt += p2 - p1; p1++; p2++; } else { p1++; } } Console.Write(cnt + "\n"); return; } // Driver Code public static void Main(String[] args) { // Given String String s = "abcdefghi"; // Function Call movetofront(s); } } // This code is contributed by sapnasingh4991
Javascript
<script> // JavaScript program for the above approach // Function to check whether a character // is vowel or not function isvowel(x) { if ( x === "a" || x === "e" || x === "i" || x === "o" || x === "u" || x === "A" || x === "E" || x === "I" || x === "O" || x === "U" ) return true; else return false; } // Function that creates a new String // such that all consonants are at // the front of the String function movetofront(s) { // To store the vowels and // consonants in the same order var vowels, consonants; // To store the resultant String var ans; vowels = consonants = ans = ""; for (var i = 0; i < s.length; i++) { // Check if s[i] is vowel if (isvowel(s[i])) { vowels += s[i]; } // Else s[i] is consonant else { consonants += s[i]; } } // concatenate the Strings formed ans = consonants + vowels; // Pointer variables var p1 = 0; var p2 = consonants.length; // Counter variable var cnt = 0; // Condition to check if the // given String has only // consonants if (p2 === ans.length) { document.write(0 + "<br>"); return; } // Condition to check if the // String has only vowels if (ans.length === vowels.length) { document.write(0 + "<br>"); return; } // Loop to find the count of // number of positions moved while (p2 < ans.length) { if (ans[p2] === s[p1]) { cnt += p2 - p1; p1++; p2++; } else { p1++; } } document.write(cnt + "<br>"); return; } // Driver Code // Given String var s = "abcdefghi"; // Function Call movetofront(s); </script>
9
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.
Publicación traducida automáticamente
Artículo escrito por shauryarehangfg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA