Back to all solutions
#1220 - Count Vowels Permutation
Problem Description
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.
Solution
/**
* @param {number} n
* @return {number}
*/
var countVowelPermutation = function(n) {
const MOD = 1000000007n;
let aCount = 1n;
let eCount = 1n;
let iCount = 1n;
let oCount = 1n;
let uCount = 1n;
for (let length = 2; length <= n; length++) {
const prevACount = aCount;
const prevECount = eCount;
const prevICount = iCount;
const prevOCount = oCount;
const prevUCount = uCount;
aCount = (prevECount + prevICount + prevUCount) % MOD;
eCount = (prevACount + prevICount) % MOD;
iCount = (prevECount + prevOCount) % MOD;
oCount = (prevICount) % MOD;
uCount = (prevICount + prevOCount) % MOD;
}
const total = aCount + eCount + iCount + oCount + uCount;
return Number(total % MOD);
};