题目链接
思路一:动态规划(三维数组)
分析:对于每个符合题目条件的回文串,一定是a、b、c、d中的某个字符开头和结尾的。那么可以将这四个字符开头当作一个状态。
定义dp: dp[x][i][j]表示 以x开头和结尾 的并且字符串范围在s[i:j]中的回文子序列的个数。其中x表示abcd中的某个字符。
首先初始化。对于长度为1的字符串肯定是回文。
所以dp[x][i][i]=1,此时的x应该为s.charAt(i)。
状态转移方程:
最后的答案应该为以a、b、c、d四个字符结尾的范围是[0][len-1]的dp相加。
代码:
class Solution {
public int countPalindromicSubsequences(String s) {
int len = s.length();
int MOD = 1000_000_000 + 7;
if(len==1){
return 1;
}
int[][][] dp = new int[4][len][len]; //dp[x][i][j]表示 以x开头和结尾 的并且字符串范围在s[i:j]中的回文子序列的个数
//初始化dp len=1
for(int i=0; i<len; i++){
dp[s.charAt(i)-'a'][i][i] = 1;
}
//长度从2开始遍历到len
for(int l=2; l<=len; l++){
for(int start = 0; start+l-1<len; start++){
int end = start+l-1;
//遍历四种字符
for(int j=0; j<4; j++){
char c = (char)('a'+j);
if(s.charAt(start)==c && c ==s.charAt(end)){
dp[j][start][end] =
(2+//2 表示 c 和cc两个回文字符串
(dp[0][start+1][end-1]+ dp[1][start+1][end-1])%MOD
+
(dp[2][start+1][end-1]+ dp[3][start+1][end-1])%MOD
)%MOD;
}else if(s.charAt(start)==c){
dp[j][start][end] = dp[j][start][end-1];
}else if(s.charAt(end)==c){
dp[j][start][end] = dp[j][start+1][end];
}else{
//s.charAt(start)!=c && c !=s.charAt(end)
dp[j][start][end] = dp[j][start+1][end-1];
}
}
}
}
int res = 0;
for(int i=0; i<4; i++){
res = (res+dp[i][0][len-1])%MOD;
}
return res;
}
}
循环调用fmincon工具箱问题 请大侠给看看我的程序出的问题:%目标函数m文件:function f=fun3(x,r)f=8/(4.4^2)*x(2)*(x(1)-1)*2/3.14*acos(exp((-1.5)*(22-r)/22/sin(atan((1-x(1))/(0.2*r)/(1+x(2))))))*((0.2*r)^3);*************************...
前言Java JDK升级到1.8后有些集合类的实现有了变化,其中ConcurrentHashMap就有进行结构上的大调整。jdk1.6、1.7实现的共同点主要是通过采用分段锁Segment减少热点域来提高并发效率,1.8版本的实现有哪些变化呢?重要概念在正式研究前,我们需要先知道几个重要参数,提前说明其值所代表的意义以便更好的讲解源码实现。table所有数据都存在tab...
错误描述在supervisord中开启了队列守护进程,但是发送数据后在redis中显示错误信息。错误提示抱歉,出错了:<br> Traceback (most recent call last):<br> File "class/flask_sockets.py", line 30, in __call__<br> handler, values = adapter.match()<br> File "/www/server/panel/...
(点击上方公众号,可快速关注)作者:信心 https://juejin.im/post/5b9091e7e51d450e70423161老样子,我们先,哦不,今天我们直接...
软件名:微信apk.1安装器大小:250k版本:1.9微信最无用的设计之一:apk自动变成apk.1,想要安装,必须下载qq浏览器才行。下载地址:https://n802.com/f/349707-483747492-f50c5a(访问密码:5036)http://www.yimuhe.com/file-4856172.htmlhttps://www.90pan.com/b2350119密码:6tsk转载请注明出处:https://blog.bitefu.net...
uboot源代码的tools/目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动映象文件。mkimage在制作映象文件的时候,是在原来的可执行映象文件的前面加上一个0x40字节的头,记录参数所指定的信息,这样uboot才能识别这个映象是针对哪个CPU体系结构的,哪个OS的,哪种类型,加载内存中的哪个位置, 入口点在内存的那个位置以及映象名是什么[email protected]:/...
STL 简介 STL(标准模板库)是一个可复用组件库,也是一个包算法与数据结构的软件框架. STL 在 1994 年走入C++标准,使得原本即将推出的C++标准延迟4 年问世, 由于STL 包含很多高效稳定的数据结构与算法, 所以在程序开发人员中得到了广泛的使用 . STL 的实现版本主要有五种,分别为 HP 实现版本,P.J.Plauger 实现版本,Rouge
首先是关于学习技术书籍的一些心得,很多人给我留言说看不下去书,想看视频学习,我不反对看视频学习,但是编程作为一门需要不断钻研的技术,只靠看视频是注定不可能成为专家的,还是得从经典的书籍中汲取知识,再加上工作中不断实践探索才是正道,总体来看,这样的效率才是最高的。学习交流可以添加微信读者交流①群 (添加微信:coderAllen)程序员技术QQ交流①群:736386324书籍介绍一.C语言入门,初学,编程基础系列1.《C语言程序设计:现代方法》(第2版)推荐理由:时至今日,
1<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content="text/html; charset=GB2312"></head><style> body{ font-family:"宋体"; font-size:...
1.说明qt的版本为qt-opensource-windows-x86-mingw530-5.7.0,可见编译器为MINGW,MSVC版本的没有加载成功,编译器如下图所示: qt中安装FFTW3,使用三种文件,头文件、lib文件和dll文件,如fftw3.h和libfftw3-3.lib,(三种精度的lib文件任选其一),后面这种文件的生成方法,可以参见我的另一篇博客《FFTW3在VS20
/* -----------ajax模块开始 -----------*/var // Document location ajaxLocParts, ajaxLocation, ajax_nonce = jQuery.now(), ajax_rquery = /\?/, rhash = /#.*$/, rts = ...
Cambricon-X: An Accelerator for Sparse NeuralNetworks一、稀疏网络 我们以前提到的深度学习网络都属于稠密网络。经过研究发现,神经元间的连接很多都是冗余的,剪枝后反而有助于精度提升。目前网络的稀疏度可以达到90%以上,也就是说原来一个100MB参数的网络,压缩后,只有不到10MB的参数,大大减少了运算量。 对于加速器设计来说,剪枝后带来的一个问题是网络不规则性。如果不能较好的解决该问题,就不能从剪枝中获得理想收益。二、几种常用的压缩方法.