5最长回文子串
原题链接:https://leetcode-cn.com/problems/longest-palindromic-substring/
我的想法:回文子串一定得有一个点做中心(或者两个点),遍历着去试,看看哪个点(或者和它临近的点一起)做中心形成的回文串最长。
class Solution {
public:
string longestPalindrome(string s) {
int i=0;
int j=0;
int k=0;
int start=0;
int end=0;
int length=0;
for(i=0;i<s.size();++i){
for(j=0;0<=i-j&&i+j<s.size();++j){
if(s[i-j]!=s[i+j]){
break;
}
}
for(k=0;0<=i-k&&i+k+1<s.size();++k){
if(s[i-k]!=s[i+k+1]){
break;
}
}
j-=1;
k-=1;
if(length<1+2*j){
length=1+2*j;
start=i-j;
end=i+j;
}
if(length<2*(k+1)){
length=2*(k+1);
start=i-k;
end=i+k+1;
}
}
string result(s,start,end-start+1);
return result;
}
};
我这道题的解法是 O ( n 2 ) O(n^2) O(n2)的,其实和官方一种解法的思想是一致的。
最优解是Manacher算法,这个看了之后再补上。