0%

leetcode 5 最长回文子串

也是蛮标准的题目了 写了一个dp的O($n^2$)的解法 马拉车的O(n)解法回头有时间来学习吧…

哦空串要单独判断…因为似乎substr对空串即使取0长度也会出问题…

++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*
* @lc app=leetcode.cn id=5 lang=cpp
*
* [5] 最长回文子串
*/
#include<string>
#include<cstring>
using namespace std;
// @lc code=start

class Solution {
public:
string longestPalindrome(string s) {
if(s.empty())
{
return string();
}
int dp[1020][1020],ans=0,start=0;
memset(dp,0,sizeof(dp));
for(int i=0;i<s.length();++i){
dp[i][i]=1;
ans=1;
}
for(int i=0;i<s.length()-1;++i){
if(s[i]==s[i+1]){
dp[i][i+1]=1;
ans=2,start=i;
}
}
for(int i=2;i<s.length();++i){
for(int j=0;j+i<s.length();++j){
if(dp[j+1][j+i-1]&&s[j]==s[j+i]){
dp[j][j+i]=1;
ans=i+1,start=j;
}
}
}
return s.substr(start,ans);
}
};
// @lc code=end