给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
示例 1:
输入: "babad" 输出: "bab" 注意: "aba"也是一个有效答案。
示例 2:
输入: "cbbd" 输出: "bb"
思路:马拉车裸题了,搓一个马拉车出来就好了
马拉车原理请转链接:https://blog.csdn.net/dyx404514/article/details/42061017

1 class Solution { 2 public: 3 string longestPalindrome(string s) { 4 // Insert '#' 5 string t = "$#"; 6 for (int i = 0; i < s.size(); ++i) { 7 t += s[i]; 8 t += "#"; 9 } 10 // Process t 11 vector<int> p(t.size(), 0); 12 int mx = 0, id = 0, resLen = 0, resCenter = 0; 13 for (int i = 1; i < t.size(); ++i) { 14 p[i] = mx > i ? min(p[2 * id - i], mx - i) : 1; 15 while (t[i + p[i]] == t[i - p[i]]) ++p[i]; 16 if (mx < i + p[i]) { 17 mx = i + p[i]; 18 id = i; 19 } 20 if (resLen < p[i]) { 21 resLen = p[i]; 22 resCenter = i; 23 } 24 } 25 return s.substr((resCenter - resLen) / 2, resLen - 1); 26 } 27 28 };