【LeetCode】5 . 最长回文子串

这篇具有很好参考价值的文章主要介绍了【LeetCode】5 . 最长回文子串。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

5 . 最长回文子串(中等)

【LeetCode】5 . 最长回文子串,LeetCode刷题,leetcode,算法,职场和发展

【LeetCode】5 . 最长回文子串,LeetCode刷题,leetcode,算法,职场和发展

方法:中心扩散法

思想

  • 「中心扩散法」的基本思想是:遍历每一个下标,以这个下标为中心,利用「回文串」中心对称的特点,往两边扩散,看最多能扩散多远。

  • 枚举「中心位置」时间复杂度为 O(N),从「中心位置」扩散得到「回文子串」的时间复杂度为 O(N),因此时间复杂度可以降到 O(N2) 。

  • 细节:回文串在长度为奇数和偶数的时候,「回文中心」的形态不一样:

    • 奇数回文串的「中心」是一个具体的字符,例如:回文串 “aba” 的中心是字符 “b”;
    • 偶数回文串的「中心」是位于中间的两个字符的「空隙」,例如:回文串 “abba” 的中心是两个 “b”,也可以看成两个 “b” 中间的空隙。

    【LeetCode】5 . 最长回文子串,LeetCode刷题,leetcode,算法,职场和发展文章来源地址https://www.toymoban.com/news/detail-689465.html

代码

class Solution {
public:
    int center = 0;
    int len = 0;
    string longestPalindrome(string s) {
        for(int i=0; i<s.size(); ++i) {
            search(i, i, s);
            search(i, i+1, s);
        }
        // 计算最长子串的起始位置
        int begin = center - (len - 1) / 2;
        return s.substr(begin, len);
    }
    void search(int i, int j, string s) {
        if(i < 0 || j >= s.size())    return ;
        // 保存当前中心
        int pos = i;
        while(i >= 0 && j < s.size() && s[i] == s[j]) {
            i--;
            j++;
        }
        // 标记最长的回文子串长度及其中心
        if(j - i - 1 > len) {
            len = j - i - 1;
            center = pos;
        } 
    }
};

参考资料

  1. 动态规划、中心扩散、Manacher 算法

到了这里,关于【LeetCode】5 . 最长回文子串的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leetcode 5 最长回文子串

    题目 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 输入:s = “babad” 输出:“bab” 解释:“aba” 同样是符合题意的答案。 解析 这道题和之前的那道回文的很像:647回文子串,求个数,解法还是动态

    2024年02月10日
    浏览(57)
  • 【LeetCode】5 . 最长回文子串

    思想 「中心扩散法」的基本思想是:遍历每一个下标,以这个下标为中心,利用「回文串」中心对称的特点,往两边扩散,看最多能扩散多远。 枚举「中心位置」时间复杂度为 O(N),从「中心位置」扩散得到「回文子串」的时间复杂度为 O(N),因此时间复杂度可以降到 O(N 2

    2024年02月10日
    浏览(32)
  • 算法刷题|647.回文子串、516.最长回文子序列

    题目:给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。 d

    2024年02月17日
    浏览(51)
  • LeetCode 刷题 3. 无重复字符的最长子串

    给定一个字符串s,找出其中不包含重复字符的最长子串。 示例 1: 示例 2: 示例 3: 提示: 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 LeetCode官方详细解答

    2024年02月10日
    浏览(53)
  • 力扣刷题笔记-05 最长回文子串

    半山腰有点拥挤,你要去山顶看看。 什么是回文 从左边出发,字符的顺序和从右边出发是一样的,比如aba,abba。那么基于这个理论,我们就可以想到解决方案: 找一个中心点,向两边出发,左右两边各移动一位,如果相同就证明是回文子串,不相同就停止,找下一个中心点

    2024年02月08日
    浏览(46)
  • 力扣题库刷题笔记5--最长回文子串

    1、题目如下: 2、个人Python代码实现:         首先想到的是通过类似冒泡排序的方式进行切片,然后判断切片的子字符串是否为回文字符串,然后记录出最长的回文字符串,代码如下:         可以看到,通过切片的方式,在字符串长度只有1的时候,会报错。当然,这里

    2024年02月09日
    浏览(57)
  • 【算法沉淀】最长回文子串

     🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏 《数据结构与算法:初学者入门指南》📘📘 希望能和大家一起学习!共同进步! 这是苏泽的个人主页可以看到我其他的内容哦👇👇 努力的苏泽 http://su

    2024年03月12日
    浏览(46)
  • 最长子串和回文子串相关的算法题解

    中等 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s = “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示

    2024年02月19日
    浏览(41)
  • 【算法Hot100系列】最长回文子串

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月04日
    浏览(37)
  • leetcode 647. 回文子串

    题目链接:leetcode 647 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不

    2024年02月05日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包