LeetCode 5216. 统计元音字母序列的数目(Java)DP
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的更多相关文章
- leetcode-157周赛-5216-统计元音字母序列的数目
题目描述: 方法:倒推 class Solution(object): def countVowelPermutation(self, n): MOD = 10 ** 9 + 7 a=e=i=o=u= ...
- OpenJudge计算概论-求字母的个数(统计元音字母个数)
/*======================================================================= 求字母的个数 总时间限制: 1000ms 内存限制: ...
- LeetCode 1223. 掷骰子模拟 Dice Roll Simulation - Java - DP
题目链接:1223. 掷骰子模拟 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[ ...
- 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++) { ...
- [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 ...
- 使用PHP的strstr()函数来统计一段字符串中元音字母的个数(区分大小写)
<?php/**练习:统计一段字符串中所有元音字母的个数(区分大小写)*/$str='This is a test file.'; //原始字符串echo $str.'<br>'; ...
- java统计英文字母、空格、数字和其它字符的数目
package tes; import java.util.Scanner; //java统计英文字母,空格,数字和其它字符的数目 public class ZiFuTongJi { public s ...
- Leetcode 345. 反转字符串中的元音字母 By Python
编写一个函数,以字符串作为输入,反转该字符串中的元音字母. 示例 1: 输入: "hello" 输出: "holle" 示例 2: 输入: "leet ...
- leetCode题解之反转字符串中的元音字母
1.问题描述 Reverse Vowels of a String Write a function that takes a string as input and reverse only the ...
随机推荐
- [Cqoi2016]K远点对 K-Dtree
4520: [Cqoi2016]K远点对 链接 bzoj 思路 用K-Dtree求点的最远距离. 求的时候顺便维护一个大小为2k的小根堆. 不知道为啥一定会对. 代码 #include <bit ...
- access us
Ubuntu下设置 chrome的SwitchyOmega Wiki (简体中文)wiki Linux安装配置客户端及开机自动启动 运维 安装 配置 搭建服务以及配置多用户 安装和配置 一键搭建 服务 ...
- 洛谷P2949题解
若想要深入学习反悔贪心,传送门. Description: 有 \(n\) 项工作,每 \(i\) 项工作有一个截止时间 \(D_i\) ,完成每项工作可以得到利润 \(P_i\) ,求最大可以得到多 ...
- GoCN每日新闻(2019-11-11)
GoCN每日新闻(2019-11-11) GoCN每日新闻(2019-11-11) 1. Go的内存管理与回收 https://medium.com/a-journey-with-go/go-memo ...
- GoCN每日新闻(2019-10-31)
GoCN每日新闻(2019-10-31) GoCN每日新闻(2019-10-31) 1. Go语言继承的其他语言的优秀之处 https://spf13.com/presentation/the-leg ...
- jQuery获取各种标签的文本和value值
<select id="test"> <option value ="volvo">Volvo</option> <o ...
- 论文阅读:Single Image Dehazing via Conditional Generative Adversarial Network
Single Image Dehazing via Conditional Generative Adversarial Network Runde Li∗ Jinshan Pan∗ Zechao L ...
- JWT了解与实战
最近在使用JWT做一个单点登录与接口鉴权的功能,正好可以对JWT有深一步的了解. 一.JWT使用场景: 1. 授权:用户登录后,每个请求都包含JWT,允许用户访问该令牌允许的路由.服务和资源.单点登录 ...
- LCA的几种做法
P3379 LCA $ 1:$蜗牛爬式 void dfs(int u,int fa) { f[u]=fa;//预处理father for(int i=head[u]; i; i=e[i].nxt) i ...
- 解决IDEA中maven导入jar包
查 看: File------>Project Structure--------->Libraries如下面没有maven所引入的jar包则为该错误[1] 错误原因: 是 ...