(leetcode)1641. 统计字典序元音字符串的数目

1641. 统计字典序元音字符串的数目

一、题目描述

给你一个整数 n,请返回长度为 n 、仅由元音 (a, e, i, o, u) 组成且按 字典序排列 的字符串数量。

字符串 s 按 字典序排列 需要满足:对于所有有效的 i,s[i] 在字母表中的位置总是与 s[i+1] 相同或在 s[i+1] 之前。

示例 1:
输入:n = 1
输出:5
解释:仅由元音组成的 5 个字典序字符串为 ["a","e","i","o","u"]
示例 2:
输入:n = 2
输出:15
解释:仅由元音组成的 15 个字典序字符串为
["aa","ae","ai","ao","au","ee","ei","eo","eu","ii","io","iu","oo","ou","uu"]
注意,"ea" 不是符合题意的字符串,因为 'e' 在字母表中的位置比 'a' 靠后
示例 3:
输入:n = 33
输出:66045

提示:
1 <= n <= 50

二、解题:动态规划

标准的dp。
构造二维数组,横轴j表示a,b,c,d,e五个字母,纵轴i代表字符串的长度,坐标(i, j)表示长度为i以第j个字母结尾的字符串的数量

因为字典序靠后的字符可以接在字典序靠前的字母的后面,所以,
状态转移方程为lst[i][j] = sum(lst[i-1][:j+1])

三、代码

class Solution:
    def countVowelStrings(self, n: int) -> int:
        lst = [[1]*5 for _ in range(n)]
        for i in range(1, n):
            for j in range(5):
                lst[i][j] = sum(lst[i-1][:j+1])
        # print(lst[n-1])
        return sum(lst[n-1])

四、答案

(leetcode)1641. 统计字典序元音字符串的数目_第1张图片

你可能感兴趣的:(Leetcode,leetcode,动态规划,算法)