Given an integer n
, your task is to count how many strings of length n
can be formed under the following rules:
- Each character is a lower case vowel (
'a'
,'e'
,'i'
,'o'
,'u'
) - Each vowel
'a'
may only be followed by an'e'
. - Each vowel
'e'
may only be followed by an'a'
or an'i'
. - Each vowel
'i'
may not be followed by another'i'
. - Each vowel
'o'
may only be followed by an'i'
or a'u'
. - Each vowel
'u'
may only be followed by an'a'
.
Since the answer may be too large, return it modulo 10^9 + 7.
Input: n = 1 Output: 5 Explanation: All possible strings are: "a", "e", "i" , "o" and "u".
Input: n = 2 Output: 10 Explanation: All possible strings are: "ae", "ea", "ei", "ia", "ie", "io", "iu", "oi", "ou" and "ua".
Input: n = 5 Output: 68
1 <= n <= 2 * 10^4
impl Solution {
pub fn count_vowel_permutation(n: i32) -> i32 {
let mut end = vec![1 as u32; 5];
for _ in 1..n {
let mut tmp = Vec::new();
tmp.push((end[1] + end[2] + end[4]) % 1_000_000_007);
tmp.push((end[0] + end[2]) % 1_000_000_007);
tmp.push((end[1] + end[3]) % 1_000_000_007);
tmp.push((end[2]) % 1_000_000_007);
tmp.push((end[2] + end[3]) % 1_000_000_007);
end = tmp;
}
(end.iter().sum::<u32>() % 1_000_000_007) as i32
}
}