题目

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

样例

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

挑战

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

解题

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

1.bab形式

2.bb形式

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

  1. public class Solution {
  2. /**
  3. * @param s input string
  4. * @return the longest palindromic substring
  5. */
  6. public String longestPalindrome(String s) {
  7. // Write your code here
  8. if( s == null || s.length() == 1)
  9. return s;
  10. String res = "";
  11. int longest = Integer.MIN_VALUE;
  12. for(int i = 1;i<s.length(); i++){
  13. String str1 = longPalindrome(s,i,i);
  14. String str2 = longPalindrome(s,i-1,i);
  15. str1 = str2.length() >= str1.length()? str2:str1;
  16. if(str1.length()>=longest){
  17. res = str1;
  18. longest = str1.length();
  19. }
  20. }
  21. return res;
  22. }
  23. public String longPalindrome(String s,int start,int end){
  24. int tmp1 = start;
  25. int tmp2 = end;
  26. while( start <= end && end<s.length() && start>=0 && s.charAt(start) == s.charAt(end) ){
  27. start--;
  28. end++;
  29. }
  30. // 没有进行while循环 说明不是回文串,这里只返回第start个字符
  31. if(start ==tmp1 && end == tmp2)
  32. return s.substring(start,start+1);
  33. // start 多减了1
  34. return s.substring(start + 1,end);
  35. }
  36. }

Java Code

总耗时: 19565 ms

  1. class Solution:
  2. # @param {string} s input string
  3. # @return {string} the longest palindromic substring
  4. def longestPalindrome(self, s):
  5. # Write your code here
  6. res = ""
  7. longest = -1
  8. if s == None or len(s) == 1:
  9. return s
  10. for i in range(1,len(s)):
  11. res1 = self.longPalindrome(s,i,i)
  12. res2 = self.longPalindrome(s,i-1,i)
  13. if len(res1)> len(res2) and len(res1)>longest:
  14. res = res1
  15. longest = len(res1)
  16. elif len(res2)> len(res1) and len(res2) >longest:
  17. res = res2
  18. longest = len(res2)
  19. return res
  20. def longPalindrome(self,s,start,end):
  21. tmp1 = start
  22. tmp2 = end
  23. while start>=0 and end<len(s) and s[start] == s[end]:
  24. start-=1
  25. end +=1
  26. if tmp1==start and tmp2 == end:
  27. return s[start]
  28. return s[(start+1):end]

Python Code

总耗时: 865 ms

动态规划

参考链接

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

  1. table[i+1][j-1] == 1 && s.charAt(i) == s.charAt(j)
  2. =>
  3. table[i][j] == 1
    初始化:table[i][i] = 1
  1. public class Solution {
  2. /**
  3. * @param s input string
  4. * @return the longest palindromic substring
  5. */
  6. public String longestPalindrome(String s) {
  7. // Write your code here
  8. if( s == null || s.length() == 1)
  9. return s;
  10. String res = "";
  11. int longest = Integer.MIN_VALUE;
  12. int n = s.length();
  13. int[][] table = new int[n][n];
  14. for(int i=0;i<n;i++){
  15. table[i][i] = 1;
  16. }
  17. for(int l=0;l<n;l++){
  18. for(int i=0;i<n-l;i++){
  19. int j = i+ l;
  20. if( (j-i<=2 || table[i+1][j-1] == 1) && s.charAt(i)==s.charAt(j)){
  21. table[i][j] =1;
  22. if(j-i+1 > longest){
  23. longest = j - i + 1;
  24. res = s.substring(i,j+1);
  25. }
  26. }
  27. }
  28. }
  29. return res;
  30. }
  31. }

j-i<=2 不明白

  1.  

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. 【Qt】Qt之启动外部程序【转】

    简述 QProcess可以用来启动外部程序,并与它们交互. 要启动一个进程,通过调用start()来进行,参数包含程序的名称和命令行参数,参数作为一个QStringList的单个字符串. 另外,也可以 ...

  2. Redis 一:安装篇

    .安装环境,虚拟机 + centos6. PS::前提已经安装了yum的情况下 第一步:安装 mkdir /usr/redis 新建redis目录 cd /usr/redis 进入目录 wget ht ...

  3. LeapMotion(2):追踪五指

    上一篇文章,我们实现了Leap Motion的简单测试.追踪其中一个手指并用红色圆形表示其在空间的位置. 这篇文章,我们来实现五指的追踪. 其实,能够实现一指的追踪,那么五指的追踪自然不成问题.但是, ...

  4. 10、WPF程序集

    WPF核心程序集 PresentationCore.dll:这个程序集定义了许多构成WPF GUI层基础的类型.例如包含WPF Ink API(pc笔针输入,手写输入)的支持.几个动画基元以及几个图形 ...

  5. vim命令总结

    前言 本文翻译自:http://bencrowder.net/files/vim-fu/,参考了VIM中文帮助. Google翻译结果和实际操作结果,对原文的部分内容重新整理,删除和添加了 部分内容并 ...

  6. http概述

    HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0的第 ...

  7. learning from the previous teams

    开发人员水平有限.分配任务的时候经常有说这个事儿做不到,或者压根不知道怎么做:验收工作频出意外,DEV写了一个模块之后,验收的时候发现模块质量不行,代码质量低是其次,无法按照给定的接口工作.设计不足. ...

  8. WebClient

    Mircsoft在dotnet1.1框架下提供的向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法.通过这个类,大家可以在脱离浏览器的基础上模拟浏览器对互联网上的资源的访问和发送 ...

  9. 交互式shell和非交互式shell、登录shell和非登录shell的区别

    交互式shell和非交互式shell.登录shell和非登录shell的区别.首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录. 交互式shell和非交互式shell(intera ...

  10. asp.net 中给gridview添加自动序号

    第一种方式,直接在Aspx页面GridView模板列中.这种的缺点是到第二页分页时又重新开始了. 代码如下: <asp:TemplateField HeaderText="序号&quo ...