题目

给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串。

样例

给出字符串 "abcdzdcab",它的最长回文子串为 "cdzdc"

挑战

O(n2) 时间复杂度的算法是可以接受的,如果你能用 O(n) 的算法那自然更好。

解题

遍历字符串所有位置,对每个位置左右对等的找回文串,主要要分为两种形式

1.bab形式

2.bb形式

对找到的回文串保留最长的那个就是答案

public class Solution {
/**
* @param s input string
* @return the longest palindromic substring
*/
public String longestPalindrome(String s) {
// Write your code here
if( s == null || s.length() == 1)
return s;
String res = "";
int longest = Integer.MIN_VALUE;
for(int i = 1;i<s.length(); i++){
String str1 = longPalindrome(s,i,i);
String str2 = longPalindrome(s,i-1,i);
str1 = str2.length() >= str1.length()? str2:str1;
if(str1.length()>=longest){
res = str1;
longest = str1.length();
}
}
return res;
}
public String longPalindrome(String s,int start,int end){
int tmp1 = start;
int tmp2 = end;
while( start <= end && end<s.length() && start>=0 && s.charAt(start) == s.charAt(end) ){
start--;
end++;
}
// 没有进行while循环 说明不是回文串,这里只返回第start个字符
if(start ==tmp1 && end == tmp2)
return s.substring(start,start+1);
// start 多减了1
return s.substring(start + 1,end);
}
}

Java Code

总耗时: 19565 ms

class Solution:
# @param {string} s input string
# @return {string} the longest palindromic substring
def longestPalindrome(self, s):
# Write your code here
res = ""
longest = -1
if s == None or len(s) == 1:
return s
for i in range(1,len(s)):
res1 = self.longPalindrome(s,i,i)
res2 = self.longPalindrome(s,i-1,i)
if len(res1)> len(res2) and len(res1)>longest:
res = res1
longest = len(res1)
elif len(res2)> len(res1) and len(res2) >longest:
res = res2
longest = len(res2)
return res
def longPalindrome(self,s,start,end):
tmp1 = start
tmp2 = end
while start>=0 and end<len(s) and s[start] == s[end]:
start-=1
end +=1
if tmp1==start and tmp2 == end:
return s[start]
return s[(start+1):end]

Python Code

总耗时: 865 ms

动态规划

参考链接

定义二维数组table ,当table[i][j] =1 时候表示字符串str中i--j部分是回文串

table[i+1][j-1] == 1 && s.charAt(i) == s.charAt(j)
=>
table[i][j] == 1
初始化:table[i][i] = 1
public class Solution {
/**
* @param s input string
* @return the longest palindromic substring
*/
public String longestPalindrome(String s) {
// Write your code here
if( s == null || s.length() == 1)
return s;
String res = "";
int longest = Integer.MIN_VALUE;
int n = s.length();
int[][] table = new int[n][n];
for(int i=0;i<n;i++){
table[i][i] = 1;
}
for(int l=0;l<n;l++){
for(int i=0;i<n-l;i++){
int j = i+ l;
if( (j-i<=2 || table[i+1][j-1] == 1) && s.charAt(i)==s.charAt(j)){
table[i][j] =1;
if(j-i+1 > longest){
longest = j - i + 1;
res = s.substring(i,j+1);
}
}
}
}
return res;
}
}

j-i<=2 不明白


lintcode :Longest Palindromic Substring 最长回文子串的更多相关文章

  1. Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)

    Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...

  2. LeetCode:Longest Palindromic Substring 最长回文子串

    题目链接 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...

  3. [leetcode]5. Longest Palindromic Substring最长回文子串

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  4. 5. Longest Palindromic Substring(最长回文子串 manacher 算法/ DP动态规划)

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  5. [LeetCode] 5. Longest Palindromic Substring 最长回文子串

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  6. 【LeetCode】5. Longest Palindromic Substring 最长回文子串

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:最长回文子串,题解,leetcode, 力扣,python ...

  7. 1. Longest Palindromic Substring ( 最长回文子串 )

    要求: Given a string S, find the longest palindromic substring in S. (从字符串 S 中最长回文子字符串.) 何为回文字符串? A pa ...

  8. 【翻译】Longest Palindromic Substring 最长回文子串

    原文地址: http://articles.leetcode.com/2011/11/longest-palindromic-substring-part-i.html 转载请注明出处:http:// ...

  9. LeetCode5. Longest Palindromic Substring 最长回文子串 4种方法

    题目链接:https://leetcode.com/problems/longest-palindromic-substring/ 题意很简单,就是求一个字符串得最长子串,这里的子串指连续的. 本文给 ...

随机推荐

  1. mongodb的常用操作(二)

    继续mongodb的学习: 9.mongodb条件查询 假设有user集合,里面结构如下:{ "_id" : ObjectId("52ab35d281181f853264 ...

  2. Js操作Select大全(取值、设置选中)

    Js操作Select是很常见的,也是比较实用的. jquery操作select(取值,设置选中) 每一次操作select的时候,总是要出来翻一下资料,不如自己总结一下,以后就翻这里了. 比如<s ...

  3. ckeditor增加上传图片的功能

    1.配置config.js开启图片上传选项卡. CKEDITOR.editorConfig = function( config ) { config.filebrowserImageUploadUr ...

  4. Spark菜鸟学习营Day5 分布式程序开发

    Spark菜鸟学习营Day5 分布式程序开发 这一章会和我们前面进行的需求分析进行呼应,完成程序的开发. 开发步骤 分布式系统开发是一个复杂的过程,对于复杂过程,我们需要分解为简单步骤的组合. 针对每 ...

  5. Oracle bbed使用说明1

    一.centos上编译安装BBED工具 [orasrv@localhost ~]$ cd $ORACLE_HOME/rdbms/lib [orasrv@localhost ~]$ make -f in ...

  6. const 的全面总结

    可以定义const常量 const int Max = 100; 2 便于进行类型检查 const常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类 ...

  7. 一致性hash应用到redis

    理解分布式存储的本质 有一个经典的实践经验: 数(值)据大了, 什么都是问题! 如果要求128B或更大数值计算, 哪么四则运算会是个大问题! 如果要求128T或更大日志存储, 哪么文件存储会是个大问题 ...

  8. Linux 系统 网络配置

    Linux 系统 网络配置 配置Linux系统网络的方法有几种,这里介绍本人常用的两种. 第一种:使用命令ifconfig配置,具体用法:Ipconfig  ethx   x.x.x.x    net ...

  9. audio 设置 currentTime 失效 的解决办法

    当服务端返回的 音频文件标示 no-cache 的时候,会引起currentTime 失败. 改掉server 返回头信息.解除禁止缓存,一切ok.

  10. MongoDB工具MagicMongoDBTool

    MagicMongoDBTool工具是一款MongoDB的数据库管理工具,用来进行简单的数据库管理工作. 此工具为国人开发,项目地址:MagicMongoDBTool,目前作者已经完成基本功能开发. ...