![4446a6e29bee045621587a9957eb46b8.png](https://i-blog.csdnimg.cn/blog_migrate/0c2334d50a1b8b0222dc9026b498721f.jpeg)
给定一个字符串s
,找到s
中最长的回文子串。你可以假设s
的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
这题我之前做过,但是感觉完全没有映像了
仿佛是别人盗了我的号,替我做的一样
话不多说,直接上思路
思路:
在考虑用哪种方法的时候,无非是从两方面考虑,时间和空间
暴力解法不提倡,不考虑,时间复杂度N!,太不核算
中心扩展,不错,差不多是N的平方
寻找中心时间复杂度:N
中心扩展时间复杂度:N
中心有两种,一种是单个,一种是两个
分别扩展,找最大长度的即可
代码:
//中心扩展
public String longestPalindrome(String s) {
if(s.length()==0)return s;
int start=0,end=0;
for(int i=0;i<s.length();i++){
int len1=expendCenter(s,i,i);
int len2=expendCenter(s,i,i+1);
int len=Math.max(len1,len2);
if(len>end-start+1){
start=i-(len-1)/2;
end=i+len/2;
}
}
return s.substring(start,end+1);
}
private int expendCenter(String s, int l, int r) {
while(l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r)){
l--;
r++;
}
return r-l-1;
}
复杂度:
时间复杂度:O(n^2)
空间复杂度:O(1)
打完收工(*^_^*)