2062. Count Vowel Substrings of a String
Description
A substring is a contiguous (non-empty) sequence of characters within a string.
A vowel substring is a substring that only consists of vowels ('a', 'e', 'i', 'o', and 'u') and has all five vowels present in it.
Given a string word, return the number of vowel substrings in word.
Example 1:
Input: word = "aeiouu" Output: 2 Explanation: The vowel substrings of word are as follows (underlined): - "aeiouu" - "aeiouu"
Example 2:
Input: word = "unicornarihan" Output: 0 Explanation: Not all 5 vowels are present, so there are no vowel substrings.
Example 3:
Input: word = "cuaieuouac" Output: 7 Explanation: The vowel substrings of word are as follows (underlined): - "cuaieuouac" - "cuaieuouac" - "cuaieuouac" - "cuaieuouac" - "cuaieuouac" - "cuaieuouac" - "cuaieuouac"
Constraints:
1 <= word.length <= 100wordconsists of lowercase English letters only.
Solutions
Solution 1: Brute Force Enumeration + Hash Table
Thinking
With \(n \le 100\) all \(O(n^2)\) substrings are cheap. A vowel substring uses only vowels and all five of them. Fix the left end and grow right; a consonant kills that left end; a set of size \(5\) scores one.
A hash set stores vowels seen in the current span.
We can enumerate the left endpoint \(i\) of the substring. For the current left endpoint, maintain a hash table to record the vowels that appear in the current substring. Then enumerate the right endpoint \(j\). If the character at the current right endpoint is not a vowel, break the loop. Otherwise, add the character at the current right endpoint to the hash table. If the number of elements in the hash table is \(5\), it means the current substring is a vowel substring, and increment the result by \(1\).
The time complexity is \(O(n^2)\), and the space complexity is \(O(C)\). Here, \(n\) is the length of the string \(word\), and \(C\) is the size of the character set, which is \(5\) in this problem.
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |