给你一个字符串 s,找到 s 中最长的回文子串。

示例 1:

输入:s = "babad"

输出:"bab"

解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"

输出:"bb"

C++23 linesExpandCollapse
void expand(string& s, int l, int r, int& start, int& maxLen) {
    while (l >= 0 && r < s.size() && s[l] ==s[r]) {
        l--;
        r++;
    }
    // 此时 l, r 在回文串的基础上多走了一步
    int len = r - l - 1;
    if (len > maxLen) {
        maxLen = len; // 获取此回文串的长度
        start = l + 1; // 获取此回文串的开头
    }
}

string longestPalindrome(string s) {
    int n = s.size();
    int start = 0, maxLen = 1;   
    // 枚举每一个中心位置
    for (int i = 0; i < n; i++) {
        expand(s, i, i, start, maxLen);
        expand(s, i, i + 1, start, maxLen);
    }
    return s.substr(start, maxLen);
}