LeetCode5 Longest Palindromic Substring

描述:Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

给一个String串,求其中最大的回文字串.这是一个典型的最长回文子串问题,目前有四种解法.

1.暴力测试,测试每个子串,显然这样是最笨的方法,时间复杂度O(n^3)

2.动态规划,可以参考http://blog.163.com/zhaohai_1988/blog/static/2095100852012716105847112/http://www.cnblogs.com/en-heng/p/3973679.html

3.中心扩展法,这也是我看到题目之后最先想到的,以一个元素为中心,分别向前和向后扩展,看是否相同,要考虑abcba形式  abccba形式这两种不同的回文子串形式,时间复杂度显然是O(n^2).

 1 public static String matchChar(String s,int l,int r){   //匹配以l和r为下标的字符是否相同
 2         int left=l;
 3         int right=r;
 4         while(left<=right&&left>=0&&right<s.length()&&s.charAt(left)==s.charAt(right)){
 5             left--;
 6             right++;
 7         }
 8         return  s.substring(left+1,right);
 9     }
10     public  String longestPalindrome(String s) {
11         int n=s.length();
12         if(0==n) return "";
13         String longestString=s.substring(0,1);//一个字符
14         for(int i=0;i<n-1;i++){
15             String tempString1=matchChar(s, i, i);  //abcba形式
16             if(tempString1.length()>longestString.length())
17                 longestString=tempString1;
18             String tempString2=matchChar(s,i,i+1);  //abccba形式
19             if(tempString2.length()>longestString.length())
20                 longestString=tempString2;
21         }
22         return longestString;
23     }

 

4.传说中的Manacher算法,时间复杂度O(n),也是比较难以理解的算法.看了好几篇博客,想要了解可以参考
http://blog.csdn.net/ggggiqnypgjg/article/details/6645824
http://articles.leetcode.com/2011/11/longest-palindromic-substring-part-ii.html

 


posted @ 2015-04-12 19:52  D_riv  阅读(140)  评论(0编辑  收藏  举报