Los intercambios mínimos necesarios para mover todas las vocales se producen después de las consonantes en una string determinada

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: 

  1. Cree las strings vacías de vocales y consonantes para almacenar las vocales y consonantes de la string dada.
  2. 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 .
  3. Almacene la concatenación de las strings de consonantes y vocales en la string ans .
  4. 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 .
  5. Inicialice una variable de contador cnt a 0.
  6. 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.
  7. 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>
Producción: 

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

Deja una respuesta

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