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:
- Cuando hay dos consonantes consecutivas como en este caso una substring de tamaño 2 puede tener 2 consonantes y ninguna vocal.
- 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>
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