Check whether all the substrings have number of vowels atleast as that of consonants

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

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: There are only two cases where the given condition is not satisfied:

1. When there are two consecutive consonants as in this case a substring of size 2 can have 2 consonants and no vowels.
2. 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 ` `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 `

Output:
```No
```

Practice Tags :