思路:中心扩展法,检测字符串s中每个以i为中心或i和i+1中间为中心的最长回文字串长度,总共需要检查
(
2
n
−
1
)
(2n-1)
(2n−1)个中心根据长度和i下标得到最长回文字串的左右位置下标,得到子串。
时间复杂度:
O
(
n
2
)
O(n^{2})
O(n2)
class Solution {
//中心扩展算法
int get_length(String s,int i,int j){
while(i>=0 && j<s.length() && s.charAt(i)==s.charAt(j)){
i--;
j++;
}
return j-i-1;
}
public String longestPalindrome(String s) {
if(s==null || s.length()<1){
return "";
}
int start=0;
int end=0;
for(int i=0;i<s.length();i++){
int len1=get_length(s,i,i);//得到以i所指字符为中心的最长回文字符长度
int len2=get_length(s,i,i+1);//得到以i和i+1中间为中心的最长回文字符长度
int len=Math.max(len1,len2);
if(len>end-start){
start=i-(len-1)/2;
end=i+len/2;
}
}
String result=s.substring(start,end+1);
return result;
}
}