1220. 统计元音字母序列的数目
给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串:
字符串中的每个字符都应当是小写元音字母**(‘a’, ‘e’, ‘i’, ‘o’, ‘u’)**
每个元音 ‘a’ 后面都只能跟着 ‘e’
每个元音 ‘e’ 后面只能跟着 ‘a’ 或者是 ‘i’
每个元音 ‘i’ 后面 不能 再跟着另一个 ‘i’
每个元音 ‘o’ 后面只能跟着 ‘i’ 或者是 ‘u’
每个元音 ‘u’ 后面只能跟着 ‘a’
由于答案可能会很大,所以请你返回 模 10^9 + 7 之后的结果。
来源:https://leetcode-cn.com/problems/count-vowels-permutation/
题解:
以e为例,e开头的字符串就是在e后面接一个a或e开头的字符串,个数就等于a开头的个数+i开头的个数,题目描述坑死人,其实是i后面不能紧接着i;
/**
* @param {number} n
* @return {number}
*/
var countVowelPermutation = function (n) {
/* dp 以a开头的字符串个数等于a连接的字符串开头的串个数相加 */
let a = e = i = o = u = 1;
let mod = 1e9 + 7;
while (--n) {
[a, e, i, o, u] = [
e % mod,
(a + i) % mod,
(a + e + o + u) % mod,
(i + u) % mod,
a % mod
];
}
return (a + e + i + o + u) % mod;
};