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 中最长的回文子串.你 ...
随机推荐
- wordpress 常用函数 checked(),selected(),disabled()
checked().selected().disabled(),这三个函数是主题设计和插件设计中添加后台设置比较常用到的函数. 例如自定义一个widget,这个widget有一个字段为文章排列方式.文 ...
- flink - 反压
http://wuchong.me/blog/2016/04/26/flink-internals-how-to-handle-backpressure/ https://ci.apache.org/ ...
- java FileWriter and FileReader
import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class FWFRD ...
- https centos6 and 7
keytool -printcert -sslserver 10.10.192.90:8443 -rfc >nexus.crt 通过 openssl 将 证书转换为 .pem格式的 通过以下命 ...
- c语言main函数返回值、参数详解(返回值是必须的,0表示正常退出)
C语言Main函数返回值 main函数的返回值,用于说明程序的退出状态.如果返回0,则代表程序正常退出:返回其它数字的含义则由系统决定.通常,返回非零代表程序异常退出. 很多人甚至市面上的一些书籍,都 ...
- windows下安装和配置mongoDB
上次在mac下安装和配置了mongodb,这次在windows下也尝试安装和配置mongodb. 1.首先下载mongodb压缩包,下载后解压到D盘或E盘.如下: 2.配置环境变量:桌面—计算机右键— ...
- NSURLConnection同步与异步请求 问题
NSURLConnection目前有两个异步请求方法,异步请求中其中一个是代理.一个同步方法.有前辈已经详细介绍,见:http://blog.csdn.net/xyz_lmn/article/deta ...
- Java学习-028-JSON 之二 -- 数据读取
JSON数据由 JSONObject.JSONArray.key_value 组合而成.通常来说,JSONObject 可以包含 JSONObject.JSONArray.key_value:JSON ...
- 圆角边框_css控制形状
border-radius:500px 来让整个图像变成圆形. border-top-left-radius: 6px;(左上角圆角) border-top-right-radius: 6px;( ...
- 一行两端对齐justify-content
一.之前不了解css3的属性,更没听过flex布局 在处理表单前面的文字,两端对齐,按照我之前的前端人员,加空格处理,但是在不浏览器解析空格的宽是不一样的 上图就用空格,在不同浏览器显示的效果,有时候 ...