img 动态规划

img

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
class Solution {

public:
string longestPalindrome(string s) {

int st = 0, L = 1;
int len = s.size();
bool dp[1100][1100];
for(int i = 0; i < len; i ++) dp[i][i] = 1; //长度为1的子串都是回文串
for(int i = 2; i <= len; i ++) {
//枚举长度
for(int j = 0; j + i - 1 < len; j ++) {
//枚举位置
int k = j + i - 1; //结束位置
if(s[j] != s[k]) dp[j][k] = 0; //如果两端字符不一致不回文
else {

if(i <= 3) dp[j][k] = 1; //长度为3或者2的都是回文
else dp[j][k] = dp[j+1][k-1]; //由之前状态推过来
}
if(dp[j][k]) st = j, L = i; //更新长度和起始位置
}
}
return s.substr(st, L);
}
};