关于最长回文串的问题
时间:2021-08-20
本文章向大家介绍关于最长回文串的问题,主要包括关于最长回文串的问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- 这两题都属于区间dp问题
- 他不和最长公共子序列一样,回文串需要对比区间内首位字符,所以就决定了他只能从中间向两边扩散
- 最后的代码会发现:只是状态转移的时候赋值问题,子序列不必连续,所以需要去找最大的,而子串连续,只要不相同,这个区间就不是回文串.
516. 最长回文子序列
给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。
子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。
示例 1:
输入:s = "bbbab"
输出:4
解释:一个可能的最长回文子序列为 "bbbb" 。
解析:两个字符比较的时候我们需要分别记录每一个字符串的位置,然后去维护dp数组,直到两个串遍历完,
这一题是求一个串的最大回文序列,可以不连续,结果是这个串有,我们化解成子问题就是从最开始的子串长度为一开始,一步一步增加,属于区间dp,搞清楚转移方程和初始化后,看一看原始数组,然后在决定怎么遍历.
class Solution {
public:
//区间dp
int longestPalindromeSubseq(string s) {
int len = s.size();
vector<vector<int>> dp(len + 1, vector<int>(len + 1, 0));
for(int i = 0; i < len; i++) {
dp[i][i] = 1;
}
for(int i = 1; i < len; i++) {
for(int j = i - 1; j >= 0; j--) {
if(s[i] == s[j]) {
dp[i][j] = dp[i - 1][j + 1] + 2;
}else {
dp[i][j] = max(dp[i][j + 1], dp[i - 1][j]);
}
}
}
return dp[len - 1][0];
}
};
5. 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
class Solution {
public:
string longestPalindrome(string s) {
int len = s.size();
vector<vector<int>> dp(len + 1, vector<int>(len + 1, 0));
for(int i = 0; i < len; i++) {
dp[i][i] = 1;
}
int ans = 0;
int start = 0,end = 0;
for(int i = 1; i < len; i++) {
for(int j = i - 1; j >= 0; j--) {
if(s[i] == s[j]) {
if(i - j == 1) dp[i][j] = 1;
else dp[i][j] = dp[i - 1][j + 1];
}
if (dp[i][j] && ans < (i - j + 1)) {
ans = (i - j + 1);
start = j,end = i;
}
}
}
return s.substr(start, end - start + 1);
}
};
原文地址:https://www.cnblogs.com/smilerain/p/15168204.html
- 如何使用深度学习去除人物图像背景
- 开源|人脸检测的C / C ++源代
- Python高性能计算库——Numba
- 最新|官方发布:TensorFlow 数据集和估算器介绍
- 干货 | PyTorch相比TensorFlow,存在哪些自身优势?
- 用TensorFlow和TensorBoard从零开始构建ConvNet(CNN)
- 从零开始:手把手教你安装深度学习操作系统、驱动和各种python库!
- TensorFlow中的那些高级API
- 特征工程之Scikit-learn
- 浅谈NumPy和Pandas库(一)
- 例解生成对抗网络
- PyTorch和Tensorflow版本更新点
- 软件随想录:代码与数据
- 从 Pipe 到 Flow
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- OpenGL ES 3.0 | 统一变量和属性的概念与(在程序中的)获取流程、统一变量缓冲区对象详解、std140块规范、用 命名统一变量块 建立 统一变量缓冲区对象 的流程 和 相关API 和...
- 深入浅出SVM(PART III)
- 高频原题——LeetCode题目8:字符串转换整数 (atoi)
- 不转字符串判断——LeetCode题目9:回文数
- 关于双指针的简单理解
- 面试题噩梦之一——LeetCode题目10:正则表达式匹配
- 什么时候触发GC
- 找找数学上的规律——LeetCode题目11:盛最多水的容器
- Java学习笔记, 不断更新
- 这题真是送分——LeetCode题目12:整数转罗马数字
- 该了解一波了!零基础入门Nginx
- 轻松一刻——LeetCode题目13:罗马数字转整数
- 动动手——LeetCode题目14:最长公共前缀
- LeetCode题目15:三数之和
- 三数之和姊妹题——LeetCode题目16:最接近的三数之和