⭐️寒假新坑——代码之狐的每日做题笔记
1220. 统计元音字母序列的数目—Hard
题目描述:
给你一个整数 n
,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n
的字符串:
- 字符串中的每个字符都应当是小写元音字母(
'a'
,'e'
,'i'
,'o'
,'u'
) - 每个元音
'a'
后面都只能跟着'e'
- 每个元音
'e'
后面只能跟着'a'
或者是'i'
- 每个元音
'i'
后面 不能 再跟着另一个'i'
- 每个元音
'o'
后面只能跟着'i'
或者是'u'
- 每个元音
'u'
后面只能跟着'a'
由于答案可能会很大,所以请你返回 模 10^9 + 7
之后的结果。
解题方法:
很基础的动态规划方法,状态为当前字母结尾的字符的可能组合数,比如长度为2的以a为结尾的组合,ea、ia、ua三个,则dp[2] [‘a’]=3;由于不需要保存中间状态,直接写为dp[‘a’]=3——由题意可知,状态的推导关系,长度为2的a结尾可以用长度为1的e、i、u结尾添加a组成,既有dp[‘a’]=pre_dp[‘e’]+pre_dp[‘i’]+pre_dp[‘u’]
代码实现:
class Solution {
public final static int MOD=1000000000+7;
public int countVowelPermutation(int n) {
//状态
int[] ans=new int[5];
//前状态
int[] mid=new int[5];
//dp初始化
for(int i=0