求一个字符串的最长回文子串。回文子串分为两种,一种是aba型的,一种是abba型的,因此两种情况都有考虑到。用一个循环,对字符串中的每一个字符作为中心进行判断,并记录下每个循环后的最长子串。时间复杂度为O(n*n)
之前写了一个程序可以运行,但是在leetcode中运行超时了。下面的是修改别人的程序,很精简。
public class LongestPalindromicSubstring {
public static void main(String[] args) {
LongestPalindromicSubstring l=new LongestPalindromicSubstring();
String str="dabace";
String pal=l.longestPalindrome(str);
System.out.println(pal);
}
public String longestPalindrome(String s) {
int len=s.length();
if(s==null || len==0 || len==1){
return s;
}
String longest=s.substring(0, 1);
//循环len-1次,第len次不用循环,因为此时为最后一个字符,回文长度为1.如果循环,findPal(s,i,i+1)会报数组越界异常
for(int i=0;i
longest.length()){
longest=s1;
}
String s2=findPal(s,i,i+1); //对abba型的回文进行判断
if(s2.length()>longest.length()){
longest=s2;
}
}
return longest;
}
public String findPal(String s,int left,int right){
while(left>=0 && right