最长回文子串
给你一个字符串 s,找到 s 中最长的 回文 子串。
https://leetcode.cn/problems/longest-palindromic-substring/description/
算法思路:
class Solution {
public:
string longestPalindrome(string s) {
int s_len = s.size();
string tmp = "#";
for (int i = 0; i < s_len; i++) {
(tmp += s[i]) += "#";
}
int begin = 0, maxlenth = 0;
int c = 0; // 存放最右侧的中心和半径
vector<int> r(tmp.size()); // 存放半径长
for (int i = 1; i < tmp.size(); i++) {
if (i < c + r[c]) {
// 在蘑菇半径内,是左侧对称值,或者蘑菇的边缘值中更小的那一个
r[i] = min(r[2 * c - i], c + r[c] - i);
}
// 如果是蘑菇边缘,要进行中心拓展
while (i - r[i] >= 0 && tmp[i - r[i]] == tmp[i + r[i]])
r[i]++;
--r[i];
// 如果是更右侧的蘑菇
if (i + r[i] > c + r[c])
c = i;
if (maxlenth < r[i]) {
maxlenth = r[i];
begin = (i - r[i]) / 2 ;;
}
}
return s.substr(begin, maxlenth);
}
};