题目如下:

解题思路:用动态规划的方法,记dp[i][j] 为第i个位置放第j个元音字母的情况下可以组成的字符串的个数,很容易得到状态转移方程。例如如果第i个元素是'e',那么第i-1的元素就只能是'a'或者'i',有 dp[i]['e'] = dp[i-1]['a'] + dp[i-1]['i'],最后只有求出第n个元素放这五个元音字母的个数的和即可。

代码如下:

class Solution(object):
    def countVowelPermutation(self, n):
        """
        :type n: int
        :rtype: int
        """
        dp = [[0] * 5 for _ in range(n)]
        vowels = ['a', 'e', 'i', 'o', 'u']
        dp[0][0] = dp[0][1] =dp[0][2] =dp[0][3] = dp[0][4] = 1
        for i in range(1,len(dp)):
            for j in range(len(vowels)):
                if vowels[j] == 'a':
                    dp[i][j] += dp[i - 1][vowels.index('e')]
                    dp[i][j] += dp[i - 1][vowels.index('u')]
                    dp[i][j] += dp[i - 1][vowels.index('i')]
                elif vowels[j] == 'e':
                    dp[i][j] += dp[i - 1][vowels.index('a')]
                    dp[i][j] += dp[i - 1][vowels.index('i')]
                elif vowels[j] == 'i':
                    dp[i][j] += dp[i - 1][vowels.index('e')]
                    dp[i][j] += dp[i - 1][vowels.index('o')]
                elif vowels[j] == 'o':
                    dp[i][j] += dp[i - 1][vowels.index('i')]
                elif vowels[j] == 'u':
                    dp[i][j] += dp[i - 1][vowels.index('i')]
                    dp[i][j] += dp[i - 1][vowels.index('o')]
        return sum(dp[-1]) % (10**9 + 7)
01-19 12:16