最长回文子串

题目:

给你一个字符串 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);
    }
};
posted @ 2022-07-11 22:43  Maple~  阅读(33)  评论(0编辑  收藏  举报