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.
找回文子串,从中心找起,向两边扩张,分情况讨论:
1)偶数 如abba;
2)奇数 如aba。
public class LongestPalindromicSubstring {
public String longestPalindrome(String s) {
int max = 1;
int maxI = 0;
boolean[] flag = new boolean[s.length()];
for(int i=0;i<s.length();i++) {
int temp = 1;
int pre=i-1,post=i+1;
while(pre>=0 && post<=s.length()-1 && s.charAt(pre)==s.charAt(post)) {
temp+=2;
pre--;
post++;
}
if(temp>max){
max=temp;
maxI = i;
flag[i] = false;
}
pre=i;
post=i+1;
temp=0;
while(pre>=0 && post<=s.length()-1 && s.charAt(pre)==s.charAt(post)) {
temp+=2;
pre--;
post++;
}
if(temp>max) {
max=temp;
maxI=i;
flag[i] = true;
}
}
if(flag[maxI])
return s.substring(maxI-max/2+1,maxI+max/2+1);
else
return s.substring(maxI-max/2, maxI+max/2+1);
}
public static void main(String[] args) {
String s = "awwtwywertyu";
System.out.println(new LongestPalindromicSubstring().longestPalindrome(s));
}
}