【leetcode】1220. Count Vowels Permutation

Topics are as follows:

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.

 

Example 1:

Input: n = 1
Output: 5
Explanation: All possible strings are: "a", "e", "i" , "o" and "u".

Example 2:

Input: n = 2
Output: 10
Explanation: All possible strings are: "ae", "ea", "ei", "ia", "ie", "io", "iu", "oi", "ou" and "ua".

Example 3: 

Input: n = 5
Output: 68

Constraints:

  • 1 <= n <= 2 * 10^4

Problem-solving ideas: the method of dynamic programming, referred DP [i] [j] is the number of strings can be composed in the case of the i-th position of the j-th place of vowels, it is easy to obtain a state transition equation. For example, if the i-th element is the 'e', then the first i-1 elements can only be 'a' or 'i', there dp [i] [ 'e' ] = dp [i-1] [ 'a '] + dp [i-1 ] [' i '], and finally only the n-th element is determined to put the number of the five vowels and can.

code show as below:

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)

 

Guess you like

Origin www.cnblogs.com/seyjs/p/11646665.html
Recommended