最长回文子串
 给你一个字符串 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);
    }
};
                

















