leetcode-5 最长回文子串(动态规划)
题目要求:
* 给定字符串,求解最长回文子串
* 字符串最长为1000
* 存在独一无二的最长回文字符串
求解思路:
* 回文字符串的子串也是回文,比如P[i,j](表示以i开始以j结束的子串)是回文字符串,
* 那么P[i+1,j-1]也是回文字符串。这样最长回文子串就能分解成一系列子问题了。
* 这样需要额外的空间O(N^2),算法复杂度也是O(N^2)。
* 首先定义状态方程和转移方程:
* P[i,j]=0表示子串[i,j]不是回文串。P[i,j]=1表示子串[i,j]是回文串。
* P[i,i]=1
* P[i,j]{=P[i+1,j-1],if(s[i]==s[j])
* =0 ,if(s[i]!=s[j])}
代码:
public static String longestPalindrome(String s){
if(s == null || s.length() == 1){
return s;
}
int len = s.length();
//flag[i][j]=true 表示子串i-j为回文字符串
boolean[][] flags = new boolean[1000][1000];
int start = 0;
int maxlen = 0;
for(int i=0; i<len; i++){
flags[i][i] = true;
//相邻的两个字符相同
if( i<len-1 && s.charAt(i) == s.charAt(i+1)){
flags[i][i+1] = true;
start = i;
maxlen = 2;
}
} //m代表回文子串长度,从3开始
for(int m = 3; m <= len; m++){
for(int i = 0; i <= len-m; i++ ){
//依次比较是否符合状态转移方程
int j = i+m-1;
if(flags[i+1][j-1] && s.charAt(i)==s.charAt(j)){
flags[i][j] = true;
start = i;
maxlen = m;
}
}
} //如果存在回文子字符串
if(maxlen >=2 ){
return s.substring(start, start+maxlen);
}
//不存在则返回null
return null;
}
leetcode-5 最长回文子串(动态规划)的更多相关文章
- LeetCode:最长回文子串【5】
LeetCode:最长回文子串[5] 题目描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: ...
- 【LeetCode】最长回文子串【动态规划或中心扩展】
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad"输出: "bab"注意: " ...
- [LeetCode] 5. 最长回文子串 ☆☆☆(最长子串、动态规划)
最长回文子串 (动态规划法.中心扩展算法) https://leetcode-cn.com/problems/longest-palindromic-substring/solution/xiang- ...
- Java实现 LeetCode 5 最长回文子串
5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab&quo ...
- 【LeetCode】最长回文子串-中心扩展法
[问题]给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 : 输入: "babad" 输出: "bab" 注意: ...
- LeetCode 05 最长回文子串
题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: ...
- 【LeetCode】最长回文子串-动态规划法
[问题]给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 : 输入: "babad" 输出: "bab" 注意: ...
- leetcode python最长回文子串
回文的意思是正着念和倒着念一样,如:上海自来水来自海上,雾锁山头山锁雾,天连水尾水连天 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: & ...
- [LeetCode] 5. 最长回文子串
题目链接:https://leetcode-cn.com/problems/longest-palindromic-substring/ 题目描述: 给定一个字符串 s,找到 s 中最长的回文子串.你 ...
随机推荐
- PHP网络操作函数汇总
PHP网络操作函数汇总 投稿:junjie 字体:[增加 减小] 类型:转载 这篇文章主要介绍了PHP网络操作函数汇总,本文列举了如gethostbyaddr.gethostbyname.head ...
- JS Date函数操作
1. 补充Format函数 // common functionsstart Date.prototype.Format = function(fmt) { //author: meizz var o ...
- Memcache 提高缓存命中率
最近手上某个项目跟新代码,新的代码里大量采用memcahce作为缓存.所以开始深入了解memcache的内存分配策略.以前就听说有个PHP写的memcache监控脚本,在网上搜索了一下,果断下载下来用 ...
- attr-img-src
https://dev.w3.org/html5/spec-preview/the-img-element.html#attr-img-src The src attribute must be pr ...
- Java 获取类名,函数名,行数
C++下用宏来实现.分别是__FILE__,__func__,__LINE__分别代表,C++编译自动在每个文件中设定__FILE__类型是字符串常量 ,将__LINE__替换为当前行数,类型是数字常 ...
- Java 实现导出excel表 POI
1.首先下载poi-3.6-20091214.jar 2.Student.java import java.util.Date; public class Student { private int ...
- Ant学习-001-ant 基础知识及windows环境配置
一.Ant 概要基础知识 Apache Ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发,用以构建应用,或结合其他开源测试工具例如 git.T ...
- Java学习-016-CSV 文件读取实例源代码
上文(CSV文件写入)讲述了日常自动化测试过程中将测试数据写入 CSV 文件的源码,此文主要讲述如何从 CSV 文件获取测试过程中所需的参数化数据.敬请各位小主参阅,若有不足之处,敬请大神指正,不胜感 ...
- office-001-Outlook邮件配置图文详解
本节以 Windows 7 操作系统下 Microsoft Outlook 配置电子邮件的方法,配以图文进行详解.敬请各位亲们参阅,若有不足之处,敬请指正,不胜感激! 闲话少数,话归正题.默认用户已经 ...
- 解决VS2010无法打开,提示无法找到atl100.dll的方法
这个问题是卸载VS2010一些组件造成的误删问题,且从网上下的atl100.dll通常与自己的VS2010不符 解决方法: 从路径:C:\Program Files\Microsoft Visual ...