Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input: “babad”
Output: “bab”
Note: “aba” is also a valid answer.
给定一个字符串,找出它的最长回文子串。假设字符串的最长长度为1000.
上代码:
string LongestPalindromicSubstring::longestPalindrome(string s)
{
// 处理特殊情况
if (s.empty()) return "";
if (s.size() == 1) return s;
int start = 0, maxLen = 1;
for (int i = 0; i < s.size();)
{
// 从下标元素i开始向两侧扩张,若满足以下条件,则至此之后的回文长度不会超过现有长度
if (s.size() - i < maxLen / 2) break;
int j = i, k = i;
// 从非相同元素开始向两侧扩张
while (k < s.size() - 1 && s[k + 1] == s[k]) ++k;
i = k + 1;
while (j > 0 && k < s.size() - 1 && s[k + 1] == s[j - 1])
{
++k;
--j;
}
int newLen = k - j + 1;
if (newLen > maxLen)
{
start = j;
maxLen = newLen;
}
}
return s.substr(start, maxLen);
}
测试代码:
LongestPalindromicSubstring longestPalindromicSubstring;
string s = "aaabbbaaacdefg";
string result = longestPalindromicSubstring.longestPalindrome(s);
cout << result << "\n";
cout << endl;