LeetCode 5. Longest Palindromic Substring(manager算法)
裸的manager算法。
代码如下:
class Solution {
public:
string longestPalindrome(string s) {
string r;
r += '#';
for(int i=0; i<s.size(); ++ i)
{
r += s[i];
r += '#';
}
int arr[r.size() + 1];
memset(arr, 0, sizeof(arr));
int mx = 0, id;
for(int i=1; i<r.size()-1; ++ i)
{
if(mx > i)
arr[i] = min(arr[2*id - i], mx-i);
else
arr[i] = 1;
while(i + arr[i] < r.size() && r[i + arr[i]] == r[i - arr[i]])
arr[i] ++;
if(i + arr[i] > mx)
{
mx = i + arr[i];
id = i;
}
}
mx = 0;
for(int i=1; i<r.size()-1; ++ i)
if(arr[i] > arr[mx])
mx = i;
if(mx & 1)
return s.substr(mx/2-(arr[mx]/2-1), arr[mx]-1);
else
return s.substr(mx/2-arr[mx]/2, arr[mx]-1);
}
};