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 <= 100
word
consists of lowercase English letters only.struct Solution;
impl Solution {
fn count_vowel_substrings(word: String) -> i32 {
let s: Vec<char> = word.chars().collect();
let n = s.len();
let mut res = 0;
for i in 0..n {
for j in i..n {
if Solution::is_vowel(&s, i, j) {
res += 1;
}
}
}
res
}
fn is_vowel(s: &[char], start: usize, end: usize) -> bool {
let mut ca = 0;
let mut ce = 0;
let mut ci = 0;
let mut co = 0;
let mut cu = 0;
for i in start..=end {
match s[i] {
'a' => {
ca += 1;
}
'e' => {
ce += 1;
}
'i' => {
ci += 1;
}
'o' => {
co += 1;
}
'u' => {
cu += 1;
}
_ => {
return false;
}
}
}
ca >= 1 && ce >= 1 && ci >= 1 && co >= 1 && cu >= 1
}
}
#[test]
fn test() {
let word = "aeiouu".to_string();
let res = 2;
assert_eq!(Solution::count_vowel_substrings(word), res);
let word = "unicornarihan".to_string();
let res = 0;
assert_eq!(Solution::count_vowel_substrings(word), res);
let word = "cuaieuouac".to_string();
let res = 7;
assert_eq!(Solution::count_vowel_substrings(word), res);
}