给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
class Solution {
public:
string longestPalindrome(string s) {
int max_length = 0;
int length_single = 0, length_double = 0;
int start = 0, end = 0;
for(int i = 0; i < s.size(); ++i)
{
length_single = get_palindrome_length(s, i, i);
length_double = get_palindrome_length(s, i, i + 1);
max_length = max(max_length, max(length_single, length_double));
if(max_length > end - start + 1)
{
start = i - (max_length - 1) / 2;
end = i + max_length / 2;
}
}
return s.substr(start, max_length);
}
int get_palindrome_length(string s, int indexL, int indexR)
{
while(indexL >= 0 && indexR < s.size() && s[indexL] == s[indexR])
{
--indexL;
++indexR;
}
return indexR - indexL - 1;
}
}
/*
执行用时 :52 ms, 在所有 C++ 提交中击败了67.06%的用户
内存消耗 :104.1 MB, 在所有 C++ 提交中击败了27.41%的用户
*/