Given a string str, the task is to check whether all the substrings of length ? 2 have the number of vowels at least as that of the number of consonants.
Examples:
Input: str = “acaba”
Output: No
The substring “cab” has 2 consonants and a single vowel.
Input: str = “aabaa”
Output: Yes
Approach: There are only two cases where the given condition is not satisfied:
- When there are two consecutive consonants as in this case a substring of size 2 can have 2 consonants and no vowels.
- When there is a vowel surrounded by two consonants, in this case a substring of length 3 is possible with 2 consonants and 1 vowels.
All the other cases will always satisfy the given conditions.
Below is the implementation of the above approach:
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
Time Complexity : O( | str | ) ,where | str | is length of given string str.
Auxiliary Space : O(1) ,as we are not using any extra space.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!