给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
string longestPalindrome(string s) {
if(s.length() <= 1) return s;
string str = "$#";
for(int i = 0; i < s.length(); i++) {
str += s[i];
str += '#';
}
int n = str.length(), r = 0, c = 0, mx = 0, id = 0;
vector<int> p(n, 0);
for(int i = 1; i < n - 1; i++) {
p[i] = r > i ? min(p[c * 2 - i], r - i) : 1;
while(str[i - p[i]] == str[i + p[i]]) p[i]++;
if(p[i] + i > r) {
r = p[i] + i;
c = i;
}
if(mx < p[i]) {
mx = p[i];
id = i;
}
}
return s.substr((id - mx) / 2, mx - 1);
}
};