【算法day5】最长回文子串——中心拓展方法
最长回文子串
给你一个字符串 s,找到 s 中最长的 回文 子串。
https://leetcode.cn/problems/longest-palindromic-substring/
class Solution {
public:
string longestPalindrome(string s) {
int s_len = s.size();
if (s_len <= 1)
return s;
int begin = 0, maxlen = 1;
for (int i = 0; i < s_len; i++) {
auto [begin1, end1] = getBorder(s, i, i); // 奇数子串
auto [begin2, end2] = getBorder(s, i, i + 1); // 偶数子串的情况;
if (end1 - begin1 + 1 > maxlen) {
maxlen = end1 - begin1 + 1;
begin = begin1;
}
if (end2 - begin2 + 1 > maxlen) {
maxlen = end2 - begin2 + 1;
begin = begin2;
}
}
return s.substr(begin, maxlen);
}
pair<int, int> getBorder(const string& s, int begin, int end) {
while (begin >= 0 && end < s.size() && s[begin] == s[end]) {
// 拓展边界
begin--;
end++;
}
return {++begin, --end};
}
};