简介

使用中心扩散法, 发现我的代码有很多的bug.改了很久

简单来说动态规划, 不如 中心扩散法来的容易理解.

code

class Solution {
public:
string longestPalindrome(string s) {
//int n = s.length();
//cout << n << endl;
if(s.size() < 2) {
return s;
}
vector<vector<bool> > dp;
dp.resize(s.length());
for(int i=0; i<s.length(); i++){
dp[i].resize(s.length());
for(int j=0; j<s.length(); j++){
dp[i][j] = false;
}
} int maxLength = 0;
int maxStart = 0;
for(int i=0; i<s.length(); i++){
dp[i][i] = true;
if(maxLength == 0) {
maxStart = i;
maxLength = 1;
}
int j = i+1;
while(j < s.length() && s[i] == s[j]){
dp[i][j] = true;
if(maxLength < j - i + 1) {
maxLength = j - i + 1;
maxStart = i; }
j++; }
}
int i,j,k; for(i=0; i<s.size(); i++){
// 寻找左边界
//cout << "j " << j << endl;
for(j=i-1; j>=0; j--){
if(dp[j][i] == false)
break;
}
//cout << "j " << j << endl;
// 寻找右边界
for(k=i+1; k<s.size(); k++){
if(dp[i][k] == false){
break;
}
}
while(j>=0 && k < s.size() && s[j] == s[k]){
dp[j][k] = true;
if(k - j + 1 >= maxLength){
maxLength = k - j + 1;
maxStart = j;
}
j--;
k++;
}
}
//cout << "here " << maxStart << " " << maxLength << endl;
return s.substr(maxStart, maxLength);
}
};

状态转移方程

\[P(i, j)=P(i+1, j-1) \wedge\left(S i==S_{j}\right)
\]

状态边界条件

\[P(i, i)=\text { true }
\]
class Solution {
public String longestPalindrome(String s) {
int len = s.length();
if(len < 2) {
return s;
} int maxLen = 1;
int begin = 0;
boolean[][] dp = new boolean[len][len];
for(int i=0; i<len; i++){
dp[i][i] = true;
}
char[] charArray = s.toCharArray();
for(int L=2; L<=len; L++){
for(int i=0; i<len; i++){
int j = L+i-1;
if(j >= len){
break;
}
if(charArray[i] != charArray[j]){
dp[i][j] = false;
} else{
if(j - i < 3){
dp[i][j] = true;
}else{
dp[i][j] = dp[i+1][j-1]; // 如果此次相等, 那么他的状态就等于前一个状态
}
}
if(dp[i][j] && j - i + 1 > maxLen){
maxLen = j - i + 1;
begin = i;
}
}
}
return s.substring(begin, begin + maxLen); // 注意java 里面的substring 与 C++ 中 substr第二个参数不一样. 一个表示坐标, 一个表示个数.
}
}

leetcode 5 最长回文串的更多相关文章

  1. Java实现 LeetCode 409 最长回文串

    409. 最长回文串 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意 ...

  2. LeetCode 409——最长回文串

    1. 题目 2. 解答 我们先来看一看回文子串的规律,如果回文子串的长度为偶数,那么其中所有的每个元素都出现了偶数次:如果回文子串的长度为奇数,那么有一个元素出现了奇数次而其余每个元素都出现了偶数次. ...

  3. leetcode 每日签到 409. 最长回文串

    题目: 最长回文串 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意: ...

  4. 字符串的最长回文串:Manacher’s Algorithm

    题目链接:Longest Palindromic Substring 1. 问题描述 Given a string S, find the longest palindromic substring ...

  5. Leetcode0005--Longest Palindromic Substring 最长回文串

    [转载请注明]http://www.cnblogs.com/igoslly/p/8726771.html 来看一下题目: Given a string s, find the longest pali ...

  6. Manacher算法 - 求最长回文串的利器

    求最长回文串的利器 - Manacher算法 Manacher主要是用来求某个字符串的最长回文子串. 不要被manacher这个名字吓倒了,其实manacher算法很简单,也很容易理解,程序短,时间复 ...

  7. ACM题目————最长回文串

    Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等   Input 输入有多组cas ...

  8. MANACHER---求最长回文串

    求最长回文串,如果是暴力的方法的话,会枚举每个字符为中心,然后向两边检测求出最长的回文串,时间复杂度在最坏的情况下就是0(n^2),为什么时间复杂度会这么高,因为对于每一个作为中心的字符的检测是独立的 ...

  9. Manacher's Algorithm 马拉车算法(求最长回文串)

    作用:求一个字符串中的最长子串,同时还可以求所有子串的长度. 题目链接: https://vjudge.net/contest/254692#problem/B 最长回文串长度的代码: int Man ...

  10. (最长回文串 模板) 最长回文 -- hdu -- 3068

    http://acm.hdu.edu.cn/showproblem.php?pid=3068 最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory ...

随机推荐

  1. 从 MySQL 获取数据,是从磁盘读取的吗?(buffer pool)

    从 MySQL 获取数据,是从磁盘读取的吗?(Buffer Pool) 在 MySQL 中,数据是否从磁盘读取取决于数据是否已经被加载到内存中.MySQL 使用 InnoDB 存储引擎 中的 Buff ...

  2. Nim 概念 Concept 对性能的影响

    Nim 概念 Concept 对性能的影响 继上一篇文章<C# 泛型编译特性对性能的影响>后,我又研究了 Nim 语言相关的设计,由于 Nim 语言与 C# 语言有些差异,比如Nim 没有 ...

  3. 读项目NeteaseCloudMusicGtk4

    netease-cloud-music-gtk4 是基于 GTK4 + Libadwaita 构造的网易云音乐播放器,专为 Linux 系统打造,已在 openSUSE Tumbleweed + GN ...

  4. 信息资源管理综合题之“ITSM(IT服务管理)和ITIL(基础架构标准库)内容”

    一.在百度百科中,关于IT服务管理有如下描述:专家的研究和大量企业时间表明,在IT项目的生命周期中,大约80%的时间与IT项目运营维护有关,而该阶段的投资仅占整个IT投资的20%,形成了典型的&quo ...

  5. 信息资源管理综合题之“某国企投资IT应用人员减少但生成率没有实质性变化的IT黑洞问题”

    一.某大型国企在IT应用上投资了2000万美元,虽然蓝领工人数量大幅减少,但实际生产率并未有实质性变化 1.企业在IT应用上的巨额投资并未达到预期目标的这种现象被称为什么? 2.产生这现象的原因有哪些 ...

  6. 立创杯(javabasic)

    Throws关键字用于对外声明方法可能发生的异常,这样调用者在调用方法时,可以明确知道方法有异常,并进行相关处理 接口中可以包含非静态成员变量 Math.round(-1.5)//-1 round(d ...

  7. odoo接口

    @http.route('/zimo_lunch/select/<string:db_name>', type='http', auth='none')def trash_demo(sel ...

  8. Qt的一个大坑:设置QPlainTextEdit和QTextEdit背景色

    在工作中遇到一个需求,需要在播放器上显示英文字幕,当鼠标点击某个单词时, 可以显示该单词的中文含义. 播放器主窗口类直接继承自QGraphicsView,然后在其上创建一个透明的QPlainTextE ...

  9. manim边做边学--显函数图像

    在Manim库中,FunctionGraph类是一个核心组件,专门用于在坐标系中绘制函数图像. FunctionGraph的主要作用是将数学函数以直观的图形形式展示出来,使得复杂的数学概念更加容易理解 ...

  10. springboot的jar包转war放入tomcat

    作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 目录 1. 修改pom文件,打包形式改为war 2.移除内嵌的tomcat模块,但是为了在本机测试方便,我们还需要引入它,所以配置如下 3.修改启动 ...