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++ 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 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 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# 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 |
<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.