5216. 统计元音字母序列的数目

给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串:

字符串中的每个字符都应当是小写元音字母('a', 'e', 'i', 'o', 'u'

每个元音 'a' 后面都只能跟着 'e'

每个元音 'e' 后面只能跟着 'a'或者是 'i'

每个元音 'i' 后面 不能 再跟着另一个 ‘i’

每个元音 'o' 后面只能跟着 'i' 或者是 'u'

每个元音 'u' 后面只能跟着 'a'

由于答案可能会很大,所以请你返回 模 10^9 + 7 之后的结果。

示例 1:

输入:n = 1
输出:5
解释:所有可能的字符串分别是:"a", "e", "i" , "o" 和 "u"。

示例 2:

输入:n = 2
输出:10
解释:所有可能的字符串分别是:"ae", "ea", "ei", "ia", "ie", "io", "iu", "oi", "ou" 和 "ua"。

示例 3:

输入:n = 5
输出:68

提示:

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

题解:

从字符串最后一个字符逆推。如下图所示,从右向左推算。数字表示以该字母开头的字符串个数。

当然,此题也可以顺推,这里就不赘述。

时间复杂度: O(n)O(n)O(n)

空间复杂度: O(n)O(n)O(n)

Java:

class Solution {
public int countVowelPermutation(int n) {
long[] dp = new long[5];
int mod = 1000000007;
Arrays.fill(dp, 1);
for (int i = 1; i < n; ++i) {
long[] ndp = new long[5];
// 逆推过程
ndp[0] = dp[1];
ndp[1] = (dp[0] + dp[2]) % mod;
ndp[2] = (dp[0] + dp[1] + dp[3] + dp[4]) % mod;
ndp[3] = (dp[2] + dp[4]) % mod;
ndp[4] = dp[0];
dp = ndp;
}
long ret = 0;
for (long v : dp) {
ret += v;
}
return (int) (ret % mod);// 强制转换优先级较高,要加括号
}
}

LeetCode 5216. 统计元音字母序列的数目(Java)DP的更多相关文章

  1. leetcode-157周赛-5216-统计元音字母序列的数目

    题目描述: 方法:倒推 class Solution(object): def countVowelPermutation(self, n): MOD = 10 ** 9 + 7 a=e=i=o=u= ...

  2. OpenJudge计算概论-求字母的个数(统计元音字母个数)

    /*======================================================================= 求字母的个数 总时间限制: 1000ms 内存限制: ...

  3. LeetCode 1223. 掷骰子模拟 Dice Roll Simulation - Java - DP

    题目链接:1223. 掷骰子模拟 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[ ...

  4. Problem D: 统计元音字母数

    #include<stdio.h> int main() { ]; int n,j,k,a,e,i,o,u; a=e=i=o=u=; gets(c); ;c[k]!='\0';k++) { ...

  5. [LeetCode] Reverse Vowels of a String 翻转字符串中的元音字母

    Write a function that takes a string as input and reverse only the vowels of a string. Example 1:Giv ...

  6. 使用PHP的strstr()函数来统计一段字符串中元音字母的个数(区分大小写)

    <?php/**练习:统计一段字符串中所有元音字母的个数(区分大小写)*/$str='This is a test file.'; //原始字符串echo $str.'<br>'; ...

  7. java统计英文字母、空格、数字和其它字符的数目

    package tes; import java.util.Scanner; //java统计英文字母,空格,数字和其它字符的数目 public class ZiFuTongJi { public s ...

  8. Leetcode 345. 反转字符串中的元音字母 By Python

    编写一个函数,以字符串作为输入,反转该字符串中的元音字母. 示例 1: 输入: "hello" 输出: "holle" 示例 2: 输入: "leet ...

  9. leetCode题解之反转字符串中的元音字母

    1.问题描述 Reverse Vowels of a String Write a function that takes a string as input and reverse only the ...

随机推荐

  1. Xamarin.Forms 自定义控件(呈现器和效果)

    Xamarin.Forms 使用目标平台的本机控件呈现用户界面,从而让 Xamarin.Forms 应用程序为每个平台保留了相应的界面外观.凭借效果,无需进行自定义呈现器实现,即可自定义每个平台上的本 ...

  2. 给codeblocks的c编译选项添加c99标准

    在codeblocks的settings中选择 compiler and debugger,选择compile setting 在其中有other options,在里面写上-std=c99 这样就可 ...

  3. COCI 2015、2016 1st round 题解(官方)

    官方题解: 官方代码: Code-KARTE: #include <cstdio> #include <iostream> #include <cstring> u ...

  4. SDL

    SDL介绍 SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成.SDL提供了数种控制图像.声音.输出入的函数,让开发者只要用相同或是相似的代 ...

  5. GCC编译UDF和gdb调试UDF

    Fluent版本:19.0 前面我们介绍过使用VS来编译和调试UDF,其实我们也可以用GCC来编译UDF.gdb调试UDF.本次介绍的方法更具有通用性,也适用于Linux下Fluent的UDF编译和调 ...

  6. 使用grpc C++功能

    grpc c++开发需要安装相关工具以及框架才能进行开发. rz 远程上传文件 本地开发环境搭建: 1.编译相关工具 pkg-config autoconf automake Libtool shto ...

  7. Vue中使用Sass全局变量

    前言 假设我们原有项目的主题色是蓝色的,这时有个需求,需要把主题色改成橙色的.一般情况下,我们可能会在main.js中引入公共样式文件,但你会发现,在组件中使用公共样式文件中定义的某个参数时,会报一个 ...

  8. 利用FUSE编写自定义的文件系统

    FUSE--用户空间文件系统(Filesystem in Userspace),具体可以度娘,反正是简化了自定义文件系统的复杂度,可以更方便地利用自定义文件系统做一些事情. 一.使用 Python 编 ...

  9. MLflow系列1:MLflow入门教程(Python)

    英文链接:https://mlflow.org/docs/latest/tutorial.html 本文链接:https://www.cnblogs.com/CheeseZH/p/11943280.h ...

  10. Python安装依赖包及开发工具转移到Visual Studio 2019

    #pip升级pip install --upgrade pip#安装pillow图形库pip install pillow #安装二维码库 pip install MyQR PyCharm工具导入依赖 ...