c_cpp 5.最长的回文子串 - Med - 2018.10.15
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 5.最长的回文子串 - Med - 2018.10.15相关的知识,希望对你有一定的参考价值。
class Solution {
public:
string longestPalindrome(string s) {
if (s.length() <= 1) {
return s;
}
// 处理边界条件字符'$','+'和'#'字符
vector<char> chars;
chars.push_back('$');
for (auto c : s) {
chars.push_back('#');
chars.push_back(c);
}
chars.push_back('#');
chars.push_back('+');
vector<int> nums(chars.size(), 1);
int mid = 0;
int right = 0;
int max = 0;
for (int idx = 0; idx < chars.size()-1; idx++) {
// right > idx
if (right > idx) {
nums[idx] = nums[2*mid-idx] > (right-idx) ? (right-idx) : nums[2*mid-idx];
}
// 继续进行匹配
while (chars[idx+nums[idx]] == chars[idx-nums[idx]]) {
nums[idx] += 1;
}
// 重置 mid
if (idx+nums[idx] > right) {
right = idx+nums[idx];
mid = idx;
}
if (nums[idx] > nums[max]) {
max = idx;
}
}
// 组装字符串
string re;
for (int idx = max-nums[max]+2; idx < max+nums[max]; idx+=2) {
re += chars[idx];
}
return re;
}
};
以上是关于c_cpp 5.最长的回文子串 - Med - 2018.10.15的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 最长回文子串的.cpp
leetcode-5 最长回文子串(动态规划)
Leetcode 5. 最长回文子串
5. 最长回文子串
5-最长回文子串
[5]. 最长回文子串