Leetcode 5. 最长回文子串

给定一个字符串 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 };
View Code
原文地址:https://www.cnblogs.com/tijie/p/9917210.html