leetcode解题报告5. Longest Palindromic Substring

【力扣:Leetcode题解系列之0005. Longest Palindromic Substring:最长回文子串解题全析】 本文全面解析了力扣第5题"最长回文子串"的三种解法:暴力遍历(O(n³))、动态规划(O(n²))和马拉车算法(O(n))。通过Python、Java、C++等语言实现,详细分析了各方法的时间空间复杂度。暴力法简单直接但效率低;动态规划利用子问题优化;马拉车算法则在线性时间内解决问题。文章还提供了代码示例,帮助理解不同解法的优劣,为处理类似回文问题提供了清晰的解题思路。 阅读详情

leetcode解题报告5. Longest Palindromic Substring

题目地址

难度是medium

题目描述

回文串:当一个字符串从左到右,和从右到左是一样的的时候,称为回文串
题目要求,给定一个字符串,找出它的子串里面最长的回文串

我的思路

第一个思路:首先最直观的思路是暴力求解,遍历所有子串,判断是否是回文串,在选择最长的那个就行了。简单可行,但肯定超时

第二个思路:通过窗口移动来遍历子串,窗口大小从大到小,那么这样找到第一个子串如果是回文串,那肯定是最长回文串了,不用全部遍历。但这只是比暴力方法稍微好一点,当最长回文串长的时候,优化明显,但当最长回文串短时,几乎和暴力方法无异。我尝试实现,并提交,果然结果超时。当多提交几次,发现有时又能AC,可能这个办法超时不是很严重。

第三个思路:根据回文串的特点,可以通过选定一个位置,然后左右延拓的办法来遍历子串。遍历奇数长度的子串,对某个位置的字符为中心,第一个子串是中心本身,左右长度加一,遇到不是回文串时(或超过字符串范围时),结束以该中心的子串寻找。选择下一个中心,继续。遍历偶数长度的子串类似,只是以某两个相邻的字符为中心。这方法相比暴力少遍历很多子串。利用回文串的特点,当一个子串不是回文串时,那么它左右延拓得到的字符串也肯定不是回文串。我们就能跳过遍历这些回文串。而且判断某个子串是否回文串时,我们只是判断左右延拓的字符是否相等而已,相比暴力遍历时要好很多。

我的代码

class Solution {
public:
    string longestPalindrome(string s) {
        string ans;
        int max = 0;
        int len;
        //遍历奇数长度的子串
        for (int i = 0; i < s.size(); i++) {
            len = 1;
            int a = i - 1;
            int b = i + 1;
            while (a >= 0 && b < s.size()) {
                if (s[a] != s[b]) {
                    break;
                }
                a--;
                b++;
                len += 2;
            }
            if (len > max) {
                ans = s.substr(a+1, len);
                max = len;
            }
        }
        //遍历偶数长度的子串
        for (int i = 0; i < s.size(); i++) {
            len = 0;
            int a = i;
            int b = i+1;
            while (a >= 0 && b < s.size()) {
                if (s[a] != s[b]) {
                    break;
                }
                a--;
                b++;
                len += 2;
            }
            if (len > max) {
                ans = s.substr(a+1, len);
                max = len;
            }
        }

        return ans;
    }
};

阅读官方题解

题目地址

情况总结如下,具体看官方题解

第一个办法是比较粗糙的。具体是找原字符串和它逆序字符串之间的公共子串。这个公共子串是回文串的一个超集,所以还得判断是否是回文串。

第二个办法,暴力遍历,超时,没什么可说的

第三个办法是动态规范。比较直观。

第四个办法就是和我的第三个思路是一致的。

第五个办法是Manacher’s algorithm。比较复杂。

思想核心总结

对于字符串问题,最直观的思路是暴力遍历。但这一般是不好的。我们希望不是简单地遍历,而是能利用问题的特性和后面遍历能利用到前面遍历的信息,避免不必要的遍历,从而加速。

一般来说,暴力遍历的下一步思路是考虑动态规划或窗口移动等方法,加速遍历。

在有些时候,更应该利用题目的特性来优化,比如本题目的回文串的特点。

5. 最长镜像子串 [leetcode 5: Longest Palindromic Substring] 5. 最长镜像子串 [leetcode 5: Longest Palindromic Substring] 原题链接 https://leetcode.com/problems/longest-palindromic-substring 老王的解法链接 https://github.com/simplemain/leetcode/blob/master/5/analysis.md 难度 ★★☆☆☆... 阅读详情

相关推荐

C++版 - Leetcode 5. Longest Palindromic Substring 解题报告

5. Longest Palindromic Substring 提交网址: https://leetcode.com/problems/longest-palindromic-substring/ Total Accepted: 108823 Total Submissions: 469347 Difficulty: Medium Given a string S, f

极客学长Bravo | 突破信息差 | 副业生财有术 1309

LeetCode第3题

3. Longest Substring Without Repeating Characters Given a string, find the length of the longest substring without repeating characters.Examples:Given “abcabcbb”, the answer is “abc”, which the length

q874724218的博客 1271

【全开源】旅行吧旅游门票预订系统源码(FastAdmin+ThinkPHP+Uniapp)

此外,系统还会根据我的旅行计划和喜好,为我推荐合适的景点和门票,让我的旅行更加丰富多彩。旅游门票预订系统的出现,不仅简化了门票预订的流程,还提高了旅行的便捷性和效率。一款基于FastAdmin+ThinkPHP+Uniapp开发的旅游门票预订系统,支持景点门票、导游产品便捷预订、美食打卡、景点分享、旅游笔记分享等综合系统,提供前后台无加密源码,支持私有化部署。如今,有了旅游门票预订系统,这些问题都能迎刃而解。智能推荐:系统还会根据你的旅行计划和喜好,为你推荐合适的景点和门票,让你的旅行更加丰富多彩。

2401_84413757的博客 1301

LeetCode 5. Longest Palindromic Substring 解题报告

LeetCode 5. Longest Palindromic Substring 解题报告题目描述Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.示例Example 1: Input : “babad” Ou

骆小坑的填坑之旅 3212

日志异常检测详细整理,看这一篇就够了(附各项目代码链接)

对于不用的日志键,用它们的参数值向量训练一个参数值异常检测模型来检测有这些参数值反映的系统性能异常。与标准的GAN框架一样,D和G的参数是基于D的输出来更新的,因此鉴别器D可以被训练为尽可能敏感地将正确的标签分配给真实和虚假序列,而生成器将被训练为尽可能聪明地在经过足够多轮的迭代后欺骗鉴别器,即误导D将真实标签分配给虚假序列。LR:逻辑回归是有监督的模型,将处理后的特征矩阵以及标记作为模型的输入,得到训练后的模型,用此模型预测新出现的特征向量,以此判断特征向量是否为异常的,进而判断日志异常。

qq_20368489的博客 1万+

Android-S无线模块前瞻

WiFi - mainlane非强制 S 采用反射的方法直接加载wifiservice,直接hook在systemserver上,无编译依赖。gms可以动态替换wifi服务。 R 采用直接启动service的方式,wifiservice仍然map在systemserver上。 WiFi - 11ad接口支持 11ad被wifi联盟商业化为WIGIG,提供短距的60GHZ载波,理论速度为当前5G 11ac的6倍。市面上基本没有手机支持,需要独立的芯片支撑此功能。 传输距离为3m以内,外界d.

头铁的伦的博客 1043

[leetcode] 5. Longest Palindromic Substring 解题报告

题目链接:https://leetcode.com/problems/longest-palindromic-substring/ Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there e

小榕流光的专栏 750

看完这篇爽文我终于学会了示波器(一)

示波器基础篇的介绍,希望对你有用,下次分享一下如何测试。

qq_45508321的博客 974

【LeetCode】5. Longest Palindromic Substring解题报告(Python)

题目分析: 这道题目是寻找字符串中最长回文字符串,很容易想到暴力求解但是题目的字符串长度是1000暴力求解需要双重循环构造子串,然后一重循环判断是否为回文字符串,所以暴力循环的时间复杂度是O(n^3),肯定时间超限。我们可以考虑动态规划去解决这个问题,大致思想如果一个字符串是回文的那么去掉首尾也一定是回文的。 代码说明: 1、dp = [[0] * lens for i in range(l...

L141210113的专栏 881

在Cursor中集成Ollama与Qwen2.5‑Coder:零成本本地AI开发环境搭建

本文详细介绍了如何零成本搭建本地AI开发环境,通过将Cursor IDE与本地运行的Ollama及Qwen2.5-Coder模型集成,实现数据不出本地的智能编程辅助。教程涵盖Ollama安装、模型拉取、ngrok内网穿透配置及Cursor设置等核心步骤,并提供了实战测试与常见问题排错指南,为注重隐私与成本的开发者提供安全高效的解决方案。

weixin_29296241的博客 1071

图数据挖掘 ECC K-core core number truss number clique

K-core:什么叫k-core,给定一个正整数k(k>=0),k-core是一个G的最大子图(也就是说k-core是一个图的限制),将这个子图定义为Hk,对于Hk中的每个顶点v,他的度数都是大于等于k的。 k-core是内嵌的,如下图所示,集合{ABCD}是H3,也就是3-core的子图。而集合{ABCDE}是H2,也就是2-core的子图,集合{ABCDEGF}是H1,也就是1-core的子图,而从集合的角度来讲H3<H2<H1。 core number:什么叫kcor

weixin_45193103的博客 1685

[Leetcode] 5. Longest Palindromic Substring 解题报告

题目 Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000. Example: Input: "babad" Output: "bab" Note: "aba" is also a valid answ

魔豆(Magicbean)的博客 597

(七)独立按键

(七)独立按键

m0_52555663的博客 1717

LeetCode(5) Longest Palindromic Substring解题报告

最长回文串Question Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000. 大意 给定一个字符串s,找到s的最长回文子串。字符串的最大长度为1000. Example Example: Input:

jackllvv的博客 220

实验2 存储器设计与实现【计算机组成原理】

实验2 存储器设计与实现【计算机组成原理】

小心星的博客 2398

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LeetCode 5. Longest Palindromic Substring 题解

本题是动态规划的经典问题,主要考察对状态定义和状态转移方程的理解。通过动态规划或中心扩展法,我们可以高效地找到最长的回文子串。动态规划的核心思想是:通过填充一个二维表格,记录每个子串是否是回文串。中心扩展法的核心思想是:遍历每个字符作为回文串的中心,向两边扩展,找到最长的回文串。在实际应用中,中心扩展法通常更受欢迎,因为它的空间复杂度更低,而且代码更简洁易懂。这种方法不仅适用于最长回文子串问题,还可以应用于许多其他需要处理回文串的问题。掌握这些方法,对于解决这类问题非常重要。

cannonjinx的博客 4597

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

c语言刷leetcode第五题Longest Palindromic Substring

近日要找实习,需要练习一下算法,于是准备刷题。用的是leetcode。但是刷了一段时间,就发现之前自己之前刷的题目的思路不是很清晰了,于是在这里记录一下自己的思路和代码,以供之后复习理解。 第五题Longest Palindromic Substring第五题Longest Palindromic Substring题干: Given a string s, find the longest

guijiao1243的博客 948

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【LeetCode】Longest Palindromic Substring 解题报告

DP、KMP什么的都太高大上了,自己想了个朴素的遍历方法。 【题目】 Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palin

跳出温水的青蛙 5132

[ LeetCode ] 5. Longest Palindromic Substring (C++ & Python)

题目: 5. Longest Palindromic Substring Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000. Example 1: Input: "babad" Output: "bab" No...

xn's blog 555

[Leetcode] 5. Longest Palindromic Substring 和 [Leetcode] 516. Longest Palindromic Subsequence 最长回文子序

目录 1、[Leetcode] 5. Longest Palindromic Substring (1)、问题描述 (2)、思路分析 (3)、Java代码 2、[Leetcode] 516. Longest Palindromic Subsequence (1)、 问题描述 ​​​​​​ (2)、 思路分析 (3)、 Java代码 1、[Leetcode] 5. Longe...

qq_29545781的博客 648

LeetCode 刷题记录 5. Longest Palindromic Substring

题目: Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000. Example 1: Input: “babad” Output: “bab” Note: “aba” is also a valid answer. Exam...

dldldl1994的博客 328

LeetCode 5 longest-palindromic-substring题解

LeetCode longest-palindromic-substring题解 题目链接 飞鱼决定开始每天保底五题(except Hard) 粗爆动态规划 (fast than 25%) 思路 主要就是挖掘前提条件: 1、单个字符必然回文 2、两个字符当且仅当他们相同时回文 其次是关联: 如果区间[i, j]是回文,当且仅当[ i+1, j-1]是回文 and s[i] == s[j] 然后再...

qq_42308861的博客 212

【LeetCode】5. Longest Palindromic Substring

5. Longest Palindromic Substring Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000. Example: Input: &quot;babad&quot; Output: &quot;bab&quot; Note: ...

zjwreal 1760

LeetCode(5) Longest Palindromic Substring

如果一个字符串从左向右写和从右向左写是一样的,这样的字符串就叫做palindromic string,如aba,或者abba。给定输入一个字符串,要输出一个子串,使得子串是输入字符串的最长的padromic string。 我的思路是这样的。 以abba这样一个字符串为例来看,abba中,一共有偶数个字,第1位=倒数第1位,第2位=倒数第2位......第N位=倒数第N位 以aba这样一个字

BUILD 1万+

LeetCode-Longest Palindromic Substring

文章目录LeetCode-Longest Palindromic Substring题目描述思路分析C++实现Scala实现 版权声明:本文为博主原创文章,转载请注明原文出处! 写作时间:2019-02-10 00:04:34 LeetCode-Longest Palindromic Substring 题目描述 LeetCode第5道题目:5. Longest Palindromic Subst...

给永远比拿愉快 802
上一篇: leetcode解题报告258. Add Digits
下一篇: leetcode解题报告6. ZigZag Conversion
sysu_xiaoming
博客等级 码龄10年 0粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值