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.
寻找字符串S的最长回文子串
回文串:类似abcba,abccba
解题思路:
字符串的每个字符i向左右两边延伸,找到回文串的“最左界“ 和 ”最右界“。
代码:
public String longestPalindrome(String s){
String sub_str = "";
for(int i=0; i<s.length(); i++){
if(i==0)
sub_str += s.charAt(0);
int res[] = isPalindromic(i, i, s); //类似aba这类回文串
if( (res[1]-res[0]+1)>sub_str.length() ){
sub_str = s.substring(res[0],res[1]+1);
}
res = isPalindromic(i, i+1, s); //类似abba这类回文串
if( (res[1]-res[0]+1) > sub_str.length() ){
sub_str = s.substring(res[0],res[1]+1);
}
}
return sub_str;
}
public int[] isPalindromic(int m, int n, String s){
int mn[] = new int[2];
while( (m>=0) && (n<s.length()) ){
if(s.charAt(m)!=s.charAt(n)){
mn[0] = m+1;
mn[1] = n-1;
return mn;
}
m--;
n++;
}
mn[0] = m+1;
mn[1] = n-1;
return mn;
}