日野弥生:勉強しよう

LeetCode 5 - 最长回文子串

发表于2024年12月22日

#双指针 #字符串 #动态规划

回文串的定义是正读反读都一样。很容易想到回文串是以某一段数据为中心,他的左边和他的右边的数据必须一致。从而可以考虑到从头到尾进行遍历,假设每一个元素为回文中心,看左右两边是否满足条件,从而找出最长的子串。获取子串的关键在于起始点和长度

观察两个测试案例发现,有偶数和奇数两种为中心的区别,考虑用左右元素的方式淡化这样的区别。 注意算法的边界在于字符串长度为1,单独处理。

class Solution {
public:
    string longestPalindrome(string s) {
        if(s.size()==1)
            return s;
        int start=0,size=s.size(),maxLen=1;
        auto fn=[&](int left, int right)
        {
            while(left>=0&&right<size&&s[left]==s[right])
            {
                if(right-left+1>maxLen){
                    start=left;
                    maxLen=right-left+1;
                }
                left--;
                right++;
            }
        };

        for(int i=0;i<size;i++)
        {
            fn(i,i);
            fn(i,i+1);
        }
        return s.substr(start, maxLen);
    }
};

フラッシュタブ:LeetCode

题目链接:https://leetcode.cn/problems/longest-palindromic-substring

上一篇

LeetCode 14 - 最长公共前缀

下一篇

LeetCode 151 - 反转字符串中的单词