Compruebe si todas las substrings tienen un número de vocales al menos igual al de consonantes

Dada una string str , la tarea es comprobar si todas las substrings de longitud ≥ 2 tienen el número de vocales al menos igual al número de consonantes.
Ejemplos: 
 

Entrada: str = “acaba” 
Salida: No 
La substring “cab” tiene 2 consonantes y una sola vocal.
Entrada: str = “aabaa” 
Salida: Sí 
 

Enfoque: Solo hay dos casos en los que no se cumple la condición dada: 
 

  1. Cuando hay dos consonantes consecutivas como en este caso una substring de tamaño 2 puede tener 2 consonantes y ninguna vocal.
  2. Cuando hay una vocal rodeada por dos consonantes, en este caso es posible una substring de longitud 3 con 2 consonantes y 1 vocal.

Todos los demás casos siempre cumplirán las condiciones dadas.
A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function that returns true
// if character ch is a vowel
bool isVowel(char ch)
{
    switch (ch) {
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
        return true;
    }
    return false;
}
 
// Compares two integers according
// to their digit sum
bool isSatisfied(string str, int n)
{
 
    // Check if there are two
    // consecutive consonants
    for (int i = 1; i < n; i++) {
        if (!isVowel(str[i])
            && !isVowel(str[i - 1])) {
            return false;
        }
    }
 
    // Check if there is any vowel
    // surrounded by two consonants
    for (int i = 1; i < n - 1; i++) {
        if (isVowel(str[i])
            && !isVowel(str[i - 1])
            && !isVowel(str[i + 1])) {
            return false;
        }
    }
 
    return true;
}
 
// Driver code
int main()
{
    string str = "acaba";
    int n = str.length();
 
    if (isSatisfied(str, n))
        cout << "Yes";
    else
        cout << "No";
 
    return 0;
}

Java

// Java implementation of the approach
class GFG
{
 
// Function that returns true
// if character ch is a vowel
static boolean isVowel(char ch)
{
    switch (ch)
    {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
            return true;
    }
    return false;
}
 
// Compares two integers according
// to their digit sum
static boolean isSatisfied(char[] str, int n)
{
 
    // Check if there are two
    // consecutive consonants
    for (int i = 1; i < n; i++)
    {
        if (!isVowel(str[i]) &&
            !isVowel(str[i - 1]))
        {
            return false;
        }
    }
 
    // Check if there is any vowel
    // surrounded by two consonants
    for (int i = 1; i < n - 1; i++)
    {
        if (isVowel(str[i]) &&
            !isVowel(str[i - 1]) &&
            !isVowel(str[i + 1]))
        {
            return false;
        }
    }
    return true;
}
 
// Driver code
public static void main(String []args)
{
    String str = "acaba";
    int n = str.length();
 
    if (isSatisfied(str.toCharArray(), n))
        System.out.println("Yes");
    else
        System.out.println("No");
}
}
 
// This code is contributed by Rajput-Ji

Python3

# Python3 implementation of the approach
 
# Function that returns true
# if acter ch is a vowel
def isVowel(ch):
    if ch in ['i', 'a', 'e', 'o', 'u']:
        return True
    else:
        return False
 
# Compares two integers according
# to their digit sum
def isSatisfied(st, n):
     
    # Check if there are two
    # consecutive consonants
    for i in range(1, n):
        if (isVowel(st[i]) == False and
            isVowel(st[i - 1]) == False):
            return False
             
    # Check if there is any vowel
    # surrounded by two consonants
    for i in range(1, n - 1):
        if (isVowel(st[i]) and
            isVowel(st[i - 1]) == False and
            isVowel(st[i + 1]) == False ):
            return False
    return True
 
# Driver code
st = "acaba"
n = len(st)
 
if (isSatisfied(st, n)):
    print("Yes")
else:
    print("No")
 
# This code is contributed by Mohit Kumar

C#

// C# implementation of the approach
using System;
     
class GFG
{
 
// Function that returns true
// if character ch is a vowel
static bool isVowel(char ch)
{
    switch (ch)
    {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
            return true;
    }
    return false;
}
 
// Compares two integers according
// to their digit sum
static bool isSatisfied(char[] str, int n)
{
 
    // Check if there are two
    // consecutive consonants
    for (int i = 1; i < n; i++)
    {
        if (!isVowel(str[i]) &&
            !isVowel(str[i - 1]))
        {
            return false;
        }
    }
 
    // Check if there is any vowel
    // surrounded by two consonants
    for (int i = 1; i < n - 1; i++)
    {
        if (isVowel(str[i]) &&
            !isVowel(str[i - 1]) &&
            !isVowel(str[i + 1]))
        {
            return false;
        }
    }
    return true;
}
 
// Driver code
public static void Main(String []args)
{
    String str = "acaba";
    int n = str.Length;
 
    if (isSatisfied(str.ToCharArray(), n))
        Console.WriteLine("Yes");
    else
        Console.WriteLine("No");
}
}
 
// This code is contributed by Rajput-Ji

Javascript

<script>
      // JavaScript implementation of the approach
      // Function that returns true
      // if character ch is a vowel
      function isVowel(ch) {
        switch (ch) {
          case "a":
          case "e":
          case "i":
          case "o":
          case "u":
            return true;
        }
        return false;
      }
 
      // Compares two integers according
      // to their digit sum
      function isSatisfied(str, n) {
        // Check if there are two
        // consecutive consonants
        for (var i = 1; i < n; i++) {
          if (!isVowel(str[i]) && !isVowel(str[i - 1])) {
            return false;
          }
        }
 
        // Check if there is any vowel
        // surrounded by two consonants
        for (var i = 1; i < n - 1; i++) {
          if (isVowel(str[i]) && !isVowel(str[i - 1]) && !isVowel(str[i + 1])) {
            return false;
          }
        }
        return true;
      }
 
      // Driver code
      var str = "acaba";
      var n = str.length;
 
      if (isSatisfied(str.split(""), n)) document.write("Yes");
      else document.write("No");
    </script>
Producción: 

No

 

Complejidad de tiempo: O (| str |), donde | calle | es la longitud de la string dada str.

Espacio auxiliar: O (1), ya que no estamos usando ningún espacio adicional.

Publicación traducida automáticamente

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