LeetCode 5. 最长回文子串(中心扩展算法)

1.题目

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:

输入: "cbbd"
输出: "bb"

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2.题解

中心扩展算法

时间复杂度为n^2,从都到尾依次以i号元素为中心,子串个数为奇数或偶数时的最长子串。

class Solution
{
public:
    string palindrome(string& s, int l, int r)
    {
        while (l >= 0 && r < s.size() && s[l] == s[r])
        {
            l--;
            r++;
        }
        return s.substr(l + 1, r - l - 1);
    }

    string longestPalindrome(string s)
    {
        string res;
        for (int i = 0; i < s.size(); i++)
        {
            string s1 = palindrome(s, i, i);
            string s2 = palindrome(s, i, i+1);
            res = res.size() > s1.size() ? res : s1;
            res = res.size() > s2.size() ? res : s2;
        }
        return res;
    }
};

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 岁月 设计师: pinMode
应支付0元
点击重新获取
扫码支付

支付成功即可阅读