技术标签: 算法 leetcode 动态规划 Leetcode
题目:
给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。
子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。
示例 1:
输入:s = “bbbab”
输出:4
解释:一个可能的最长回文子序列为 “bbbb” 。
示例 2:
输入:s = “cbbd”
输出:2
解释:一个可能的最长回文子序列为 “bb” 。
解答:
此题使用动态规划思想,首先写出状态转移函数:
我们使用dp[i][j]表示字符串i到j是否是回文子串的长度。
状态转移函数如下:
dp[i][j] = dp[i+1][j-1]+2(s[i] =s[j])
dp[i][j]= max(dp[i+1][j],dp[i][j-1]) ([i] !=s[j])
dp[i][i]=1
需要考虑遍历的顺序,画图看。
如下:
class Solution {
public:
int longestPalindromeSubseq(string s) {
if(s.size()<2){
return 1;
}
int dp[1000][1000]={
0};//dp[i][j]表示字符串[i到j]最大回文序列长度
for(int i=0;i<s.size();i++){
dp[i][i]=1;
}
//思考为什么for循环要如此遍历。
for(int i=s.size()-1;i>=0;i--){
for(int j=i+1;j<s.size();j++){
if(s[i!=s[j]]){
dp[i][j]=max(dp[i+1][j],dp[i][j-1]);
}
if(s[i]==s[j]){
if(j-i<=2){
dp[i][j]=j-i+1;
} else {
dp[i][j]=2+dp[i+1][j-1];
}
}
}
}
return dp[0][s.size()-1];
}
};
总结:
(1)写出状态转移函数并且明确边界。
(2)思考两个for循环该怎么遍历,i,j谁在前,从大到小还是从小到大遍历,都是可思考的事情。
用到 Eigen/Core 和 Eigen/Geometry 模块定义一个3×33 \times 33×3 矩阵并使用单位阵对其初始化:矩阵名称 = Eigen::Matrix3d::Identity()定义一个旋转向量:Eigen::AngleAxised 矩阵名称(旋转角*(弧度),旋转轴(3×13\times13×1)*)输出精度设定:cout.precision(val) (小数点后...
Windows 搭建 FTP 服务器
1.字符串的定义方式有以下4种,一般用指针最为合适。#include <stdio.h>#include <stdlib.h>int main(){ int i; char str[5]={'a','b','c','d','e'}; //第一种 for(i=0;i<sizeof(str)/sizeof(str[0]);i++){ printf("%c",str[i]); } putchar('\n'); printf("===========
Floorplanning在vivado中,可以将某一个模块的代码固定在某一个范围内,可以使用Floorplanning功能。首先完成一次编译后,选择open Implemented Design功能,选择目标模块,再选择Draw Pblock功能,可以在右侧画出你想要将其布局的地方。完成后选择保存。注意所选择的范围区域的资源足够模块代码使用。Fix cells当FPGA时序约束比较困难时,某个模块的代码容易出现问题,我们可以首先针对易出现问题的模块编译出一个简易无时序...
一、简述一般我们给QComboBox设置完字体之后,在显示上并没有什么问题如下图。a、正常状态由于程序在最大化的时候,因为主窗口尺寸变大,需要整体改变所有控件的尺寸,文字的大小,所以在窗口最大化时因为文字变大,所以会出现这样的效果。我们发现下拉列表没有铺满,虽然下拉框的的高度变了。b、字体放大时,文字错位所以在ComboBox创建完成,第一次展开下拉框时,下拉框文字显示是正常的,无...
关注“重度前端”代码之外更应该学会独立思考助力前端深度学习━━━━译文链接:http://www.codeceo.com/article/javascript-fun...
来源:stackOverFlow解决方法把 .vscode 下 compileCommands_***.json 里的C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30133\\bin\\HostX64\\x64\\cl.exe替换成\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\
FTP 简介FTP(File Transfer Protocol,文件传输协议)是用于在网络上进行文件传输的一套标准协议,它属于网络传输协议的应用层。它最主要的功能是在服务器与客户端之间进行文件的传输。这个协议使用的是明文传输。为了更安全的使用FTP协议,只介绍较为安全但功能较少的vsftpd这个软件。FTP服务器的功能除了单纯的进行文件的传输与管理外,依据服务器软件的配置架构,它还可以提供以下几个主要功能:1、不同的用户:FTP服务器在默认的情况下,依据用户登录的情况而分为三种不同的身份,分别是:
原题地址:https://leetcode-cn.com/problems/minimum-window-substring/description/题目描述:给定一个字符串 S 和一个字符串 T,请在 S 中找出包含 T 所有字母的最小子串。示例:输入: S = "ADOBECODEBANC", T = "ABC"输出: "BANC"说明:如果 S 中不存这样的子串,...
一、前言个人认为:作为一名语言爱好者,需要了解到一门语言的发展史(当然这个在面试的时候属于拓展话题,会让面试官眼前一亮)。如果单纯停留在使用者的角度,二、
elasticsearch是基于Luence的一个全文检索框架,高效,快速,准确。本文参考一下几篇博客:http://blog.csdn.net/cnweike/article/details/33736429http://www.cnblogs.com/zhongshengzhen/p/elasticsearch_logstash.htmlhttp://blog.
-define:NGUI_3-unsafe