Modifique la string para que contenga todas las vocales al menos una vez.

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>
Producción: 

AOUDEFGHI

 

Complejidad de tiempo: O(N), donde N es el tamaño de la string

Espacio Auxiliar: O(N)

Publicación traducida automáticamente

Artículo escrito por indrajit1 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 *