LeetCode 5. Longest Palindromic Substring

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 难度 ★★☆☆☆... 阅读详情

求最长回文子串。

解法1:直接暴力求解,两个函数,一个函数列出所有子串,一个函数判断是否回文串(遍历)。

但是时间复杂度太高,O(n3),只能通过一半的测试用例。

解法2:将字符串反转得到反转字符串rev,两个字符串相等,即为回文子串。按照这样的思路,主要还是两部分功能,一是列出所有子串,二是利用反转,判断是否回文串,时间复杂度O(n2)。

测试用例:102/103

class Solution {
public://先找最长公共子串,再判断该子串是否是回文串
    string longestPalindrome(string s) {
        if(s.length()==1) return s;
        string rev = s;
        string res;
        std::reverse(rev.begin(),rev.end());
        if(rev==s) return s;
        int len = 0;
        for(int i = 0; i<s.length();i++){
            string temp;
            for(int j = i; j < s.length();j++){
                temp = temp+s[j];
                if(len>=temp.length())
                    continue;
                else if(rev.find(temp)!=-1){
                    string q = temp;
                    std::reverse(q.begin(),q.end());
                    if(q==temp){
                        len = temp.length();
                        res = temp;
                    }
                }
                else break;
            }
            temp = "";
        }
        return res;
    }
};

解法3:中心扩展法

以"ababd"为例,最大回文子串为"bab",该子串可以看成是由“a”为中心扩展开来的;而“dbaabc”这种,则是由aa扩展开来的,因此,假设字符串长度为n,中心点为1的话(n种可能),中心点为2的话(n-1种可能),因此最多有(2n-1)个中心。时间复杂度O(n2)。

class Solution {
public:
    string longestPalindrome(string s) {
        if(s.length() < 1){
            return "";
        }
        int start = 0, end = 0;
        for(int i = 0;i<s.length();i++){
            int len1 = expandAroundCenter(s, i , i);
            int len2 = expandAroundCenter(s, i, i + 1);
           // int len = max(len1, len2);
            if(len1 > end - start){
                start = i - len1 / 2;
                end = i + len1 / 2;
            }
            if(len2 > end - start){
                start = i - (len2 - 2) /2; 
                end = i + 1 + (len2 -2) / 2;
            }
        }
            return s.substr(start, end - start + 1);
        }
    int expandAroundCenter(string s, int left, int right){
        int L =left, R = right;
        while(L>=0 && R < s.length() && s[L] == s[R]){
            L--;
            R++;
        }
        return R - L - 1;
    }
    };

解法4:动态规划算法

动态规划:由状态和状态转移构成

维护一个二维数组dp[j][i],i-j表示一个字符区间,true和false表示是否回文串。如果i == j,说明只有一个字符,是回文串;若j + 1 =i,说明两个字符,判断s[i]==s[j]即可;若i - 1 > j,说明至少有3个字符,除了需要判断s[i]和s[j]之外,需要判断s[i -1] == s[j + 1],因此,可以写出一个分段函数。

时间复杂度O(n2)

注意条件:若i - j < 2, 即i - j == 1或 i < j,则为1个字符或者没有,字符,直接满足条件

class Solution {
public:
    string longestPalindrome(string s) {
        if (s.empty()) return "";
        int n = s.size(), dp[n][n] = {0}, left = 0, len = 1;
        for (int i = 0; i < n; ++i) {
            dp[i][i] = 1;
            for (int j = 0; j < i; ++j) {
                dp[j][i] = (s[i] == s[j] && (i - j < 2 || dp[j + 1][i - 1]));
                if (dp[j][i] && len < i - j + 1) {
                    len = i - j + 1;
                    left = j;
                }
            }
        }
        return s.substr(left, len);
    }
};

 

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 阅读详情

相关推荐

[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, and there exists one unique longest palindromic substring.我用的是中心扩展法 因为回文字符串是以中心轴对称的,

杜鲁门的博客 734

[ 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

Blazor Session设置

微软官方封装了一些浏览器的操作,其中就有Session的操作的封装ProtectedSessionStorage 微软文档因为我们知道,依赖注入的生命周期是Singleton程序Scoped网页:刷新,url直接跳转都会重置。Transient路由C# Blazor 学习笔记(10):依赖注入但是没有一个和浏览器绑定的生命周期。即浏览器关闭才会退出。这个是后端无法获取的,因为后端根本不知道浏览器何时关闭。这个只能用浏览器自带的缓存。

qq_44695769的博客 1788

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的博客 329

深信服防火墙路由模式开局部署-手把手教学(小白篇)

手把手教学,拿到深信服的防火墙路由模式该如何开局?

m0_64423407的博客 2万+

Qt Tab Widget 实战:如何打造一个可动态增删的标签页管理器(附完整代码)

本文深入探讨了使用Qt框架中的Tab Widget控件构建动态标签页管理器的实战方法。通过分析动态增删的核心挑战,提供了完整的C++代码示例,涵盖信号槽机制、页面生命周期管理、上下文菜单实现以及状态持久化等关键功能,帮助开发者打造高效、用户友好的桌面应用界面。

bb456的博客 1047

Leetcode 5.Longest Palindromic Substring

从这个月开始刷leetcode的题,由于水平有限,欢迎交流和提宝贵的意见。下面是我对 5.Longest Palindromic Substring 的实现。char *longestPalindrome(char *s) { unsigned long len; int count; int start,end; int l,r; int max;

WolfgangBai的博客 366

告别浏览器崩溃!EasyPlayer.js长时间播放FLV视频内存泄漏排查指南

本文针对EasyPlayer.js长时间播放FLV视频导致浏览器内存泄漏和崩溃的问题,提供了一套系统性排查与解决方案。核心策略包括将视频编码从H.265转为H.264以降低解码压力,以及将传输协议从HTTP-FLV切换至WebRTC以优化资源管理。文章还详细介绍了播放器实例生命周期管理、浏览器开发者工具监控等精细化排查手段,帮助开发者实现稳定、长时间的多路视频播放。

weixin_29229055的博客 175

LeetCode 5. Longest Palindromic Substring 题解

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

cannonjinx的博客 4597

光学仿真案例(1) 铌酸锂非线性波导仿真模拟 FDTD仿真

在过去几年里,许多集成光子学应用往往需要多个相干可调谐光源,而且从外部激光器引入额外的光输入增加了芯片封装的复杂性,如果使用基于III-V族、氮化硅(SiN)或铌酸锂(LNO)的集成光源又大大增加了制造复杂性和成本。然而,通过非线性谐波相互作用产生的光源不需要额外的制造工艺来产生增益、反馈和外部电路,即可支持许多应用。在下面的案例中,演示了一种基于Luo[1]的铌酸锂波导频率转换集成系统。该案例主要仿真了利用温度调制实现高效相位匹配的铌酸锂纳米光子波导的二次谐波产生。

q895235273的博客 4145

搞定ESD(四):ESD干扰耦合路径深入分析(二)

静电放电过程中静电干扰主要通过三种间接耦合方式干扰敏感源,即电场耦合、磁场耦合、地弹。前文已经深入分析了静电放电过程中的电场耦合,今天就谈谈静电放电过程中的磁场耦合,也可以理解环路耦合。熟话说的好〝人往高处走,水往低处流〞,静电电流也会选择阻抗最低的路径返回到源端。静电电流流会源端的路径实际上就构成了电流环路,当敏感信号形成的电流环路与静电电流环路存在共环路时,就会将静电放电干扰耦合到敏感信号环路内,干扰敏感信号。

记得诚 2798

LeetCode(5) Longest Palindromic Substring

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

BUILD 1万+

概念解析 | 雷达动态范围

这里存在一个动态范围的问题:强雷达发射信号和弱目标反射信号存在非常大的功率差异,比如传统的脉冲多普勒雷达动态范围可达90dB以上。随着上述技术的发展,预计未来十年雷达接收机动态范围将达到120dB以上,届时雷达的监视能力将得到极大增强。简单来说,雷达动态范围越大,表示接收机噪声越低,对强信号过载保护能力越强,就越能检测到弱信号目标。此外,部分新概念雷达对动态范围提出新的需求,如被动雷达动态范围需大于100dB。当前,随着阵列雷达和数字雷达技术的发展,对雷达接收机动态范围提出了更高要求。

NLOS的博客 1051

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

一文探讨视频秒开:m3u8视频格式与视频秒开优化

秒开指的是,一秒内成功加载的播放数/播放总数。本意是想对比一下m3u8与mp4视频格式,并了解m3u8格式优缺点,以确定一个大概优化方向。但对m3u8做简单了解后,觉的m3u8可能是一个优化方向。

bjxiaxueliang的CODING小栈 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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, and there exists one unique

六道的专栏 567

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[Java]LeetCode5 Longest Palindromic Substring

[Java]LeetCode5 Longest Palindromic Substring

fumier的专栏 1202

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【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

一 题目 Given a strings, find the longest palindromic substring ins. You may assume that the maximum length ofsis 1000. Example 1: Input: "babad" Output: "bab" Note: "aba" is also a valid answer....

bohu83的博客 434

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, and there exists one unique longest palindromic substring. 分析: 采用中心扩展法,每

哈哈的个人专栏 3371

Leetcode 5 Longest Palindromic Substring

Leetcode 5 Longest Palindromic Substring Java easy-understanding solution Approach 3: Dynamic Programming class Solution { public String longestPalindrome(String s) { int max = 0; ...

weixin_43876597的博客 117

【LeetCode】5. Longest Palindromic Substring 最长回文子串

【LeetCode】5. Longest Palindromic Substring 最长回文子串

qq_42823184的博客 144

LeetCode 5 Longest Palindromic Substring

Problem 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. ...

weixin_43350346的博客 192
上一篇: python对数据的一些处理方法
下一篇: LeetCode 6. ZigZag Conversion
DedicateToAI
博客等级 码龄9年 6粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值