题面:
样例:
题解:
dp[i][j] 表示前i个字符当最后一个字符为【a=0,e=1,i=2,o=3,u=4】时的数量,转移方程易得。
代码:
class Solution { public:int long long dp[20010][5]; int mod=1e9+7; int countVowelPermutation(int n) { for(int i=0;i<5;i++)dp[1][i]=1; for(int i=1;i<n;i++) { dp[i+1][1]=(dp[i+1][1]+dp[i][0])%mod; dp[i+1][0]=(dp[i+1][0]+dp[i][1])%mod; dp[i+1][2]=(dp[i+1][2]+dp[i][1])%mod; for(int j=0;j<5;j++) { if(j==2)continue; dp[i+1][j]=(dp[i+1][j]+dp[i][2])%mod; } dp[i+1][2]=(dp[i+1][2]+dp[i][3])%mod; dp[i+1][4]=(dp[i+1][4]+dp[i][3])%mod; dp[i+1][0]=(dp[i+1][0]+dp[i][4])%mod; } int ans=0; for(int i=0;i<5;i++) { ans=(dp[n][i]+ans)%mod; } return ans; } };