最长回文子串
题目:
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
提示:
- 1 <= s.length <= 1000
- s 仅由数字和英文字母组成
题解:
遍历每个字符,以该字符为中心,使用双指针向两边移动,得出最大的回文子串。但是需要注意有两种情况,就是回文子串的个数是奇数个还是偶数个。
class Solution {
public:
string longestPalindrome(string s) {
int l = 0, r = 0, maxl = 1;
for (int i = 0; i < s.size(); i ++) {
int j = i, k = i;
for ( ; j >= 0 && k < s.size(); j --, k ++) {
if (s[j] != s[k]) break;
}
if (k - j - 1 > maxl) l = j + 1, r = k - 1, maxl = k - j - 1;
}
for (int i = 0; i < s.size(); i ++) {
int j = i, k = i + 1;
for ( ; j >= 0 && k < s.size(); j --, k ++) {
if (s[j] != s[k]) break;
}
if (k - j - 1 > maxl) l = j + 1, r = k - 1, maxl = k - j - 1;
}
return s.substr(l, r - l + 1);
}
};