最长回文子串
https://leetcode-cn.com/problems/longest-palindromic-substring/
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
用动态规划来做,列举了三种解法
解法一
-
动态规划求解:
map[i][j]
中,i表示起点坐标,j表示长度map[i][1] = 1
,单个的字符同样为回文串- 当
s[i] == s[i+1]
时候,map[i][2] = 2
,连续的串同样为回文串 map[i-1][j+2] = j+2
当且仅当,map[i][j]
非零(即对应的字符串为回文串),且s[i-1] == s[i+j]
(即,两边同时扩充一个位置),所以长度就是其本身
-
T: 156 ms M: 14.8 MB
class Solution {
public:
string longestPalindrome(string s) {
if (s.size() < 2)
return s;
int map[2000][2001];
int total = 1, start=0;
for (int i = 0; i < s.size(); ++i) map[i][1] = 1;
for (int i = 0; i < s.size()-1; ++i){
if (s[i] == s[i+1]) {
map[i][2] = 2;
total = 2;
start = i;
}else {
map[i][2] = 0;}
}
for (int j = 3; j <= s.size(); ++j)<