leetcode-5 最长回文串
题目描述:
- 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
input:babad
output:bab
input: cbbd
output: bb
分析思路:
对于本题,我们要找的是最常的回文子串,那么我们可以以每一个字符作为一个子串的中间(当子串长度为奇数时),然后从这个字符开始,用双指针想左右两侧进行遍历,当左右两侧字符str[l] != str[r] 或者 l,r 超出了字符串的下标时遍历结束。将此时得到的字符串长度 r- l - 1 与上一次得到的字符串的长度进行比较,取较长的。
同理,如果子串长度为偶数时,以s[i] 为中间,l = i, r = i + 1;
最后的最后,就可以得到最长的子串。
class Solution {
public:
string longestPalindrome(string s) {
string res;
for(int i =0 ; i < s.size(); i++){
int l = i - 1;
int r = i + 1;
while(l >= 0 && r < s.size() && s[l] == s[r])l--,r++;
if(res.size() < r - l - 1) res = s.substr(l + 1,r - l - 1);
l = i;
r = i + 1;
while(l >= 0 && r < s.size() && s[l] == s[r])l--,r++;
if(res.size() < r - l - 1) res = s.substr(l + 1,r - l - 1);
}
return res;
}
};