leetcode-5

题目:

给你一个字符串 s,找到 s 中最长的 回文子串

示例 1:输入:s = "babad"  输出:"bab"  解释:"aba" 同样是符合题意的答案。

示例 2:输入:s = "cbbd"    输出:"bb"

提示:   1 <= s.length <= 1000  s 仅由数字和英文字母组成

 

推导:

代码:

 1 class Solution {
 2 public:
 3     string longestPalindrome(string s) {
 4         int n = s.size();
 5         int maxLen = 1; // 定义最大回文串长度
 6         int begin = 0;
 7         if (n < 2) {
 8             return s;
 9         }
10 
11         // 创建二维数组dp[i][j]
12         vector<vector<int>> dp(n, vector<int>(n));
13 
14         // 首先对对角线上的单个元素形成的回文赋值true
15         for (int i=0; i<n; ++i) {
16             dp[i][i] = true;
17         } 
18 
19         for (int L=2; L<n; ++L) {
20             for (int i=0; i<n; ++i) {
21                 int j = L+i-1; // 起始的 L = 2,所以 j = 2+0-1 = 1,j = L-1+i, 
22                                // 可见 L-1 始终大于0, 因此 j > i
23                 
24                 // 如果右边界越界,则直接结束循环
25                 if (j >= n) {
26                     break;
27                 }
28 
29                 if (s[i] != s[j]) {
30                     dp[i][j] = false; // 如果串的首尾元素不相等,则判断该串 s[i..j] 不是回文串
31                 } else {
32                     if (L < 4){
33                         dp[i][j] = true; // 看笔记,或者博客园
34                     } else {
35                         dp[i][j] = dp[i+1][j-1]; // 看笔记,或者博客园
36                     }
37                 }
38                 if (dp[i][j] == true && L > maxLen) { 
39                     // 这里的比较条件可写为 if dp[i][j]
40                     // 这是因为 dp[i][j] 中仅存放 true/false,dp[i][j] == true 就相当于dp[i][j]
41                     // 后半部分可省略是因为 L 本身是在递增的,而每次循环 maxLen 的最大值总是当前循环的L 
42                     // 因此后面 L 一定比前面的maxLen要大,所以只要出现首尾相等,就说明L更大,因此可以省略
43                     maxLen = L;
44                     begin = i;
45                 }
46             }
47         }
48         return s.substr(begin, maxLen);
49     }
50 };

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/772640.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Uniapp 之手写签名

一、效果图二、代码示例 qianming.jsexport const qianming = {data() {return {windowWidth: 0,pixelRatio: 0,context: null,points: [],oldPoints: [],qm_width: 280,qm_height: 120,qm_img: }},methods: {qm_start() {const systemInfo = uni.getSystemInfoSync()this.wind…

代码随想录day11 || 150 逆表达式求值 239 滑动窗口最大值 347 前k最高频元素

150 逆波兰表达式计算func evalRPN(tokens []string) int {// 自己想是真的想不出来,看了视频之后有了思路// 本质上逻辑就是遇到数字入栈,遇到运算符号 出栈两个元素然后计算再入栈,最终就是计算结果stack := Constructor()for _, val := range tokens{// 如果数字入栈if i…

计算机组成与体系结构-校验码

奇偶校验码 奇偶校验是一种简单有效的校验方法,这种方法通过在编码中增加一位校验位来使编码中1的个数为奇数(奇校验)或者为偶数(偶校验),只能发现奇数个数据位 出错的情况.循环冗余校验码 CRC(Cyclic RedundancyCheck)循环冗余校验是一种常用的错误检测技术,用于在数据传输…

CAD快捷键命令大全(最全)

勇者无惧,强者无敌。

电影《抓娃娃》迅雷/百度云下载[超清版BT种子][MP4/2.89GB]分享

电影《抓娃娃》是一部由闫非、彭大魔联合执导,沈腾、马丽领衔主演的喜剧电影。该片于2024年7月16日在中国大陆正式上映,以其独特的剧情设定和深刻的主题探讨,迅速吸引了广大观众的关注。影片不仅延续了“沈马组合”一贯的幽默风格,更在喜剧外壳下包裹了深刻的教育主题,让人…

PWM波形生成

背景 方法 定时器 (1)高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线 (2)通用定时器timer2~timer5,通用定时器timer12~timer14以及基本定时器timer6,timer7的时钟来源是APB1总线 (3)当APB1和APB2分频数为1的时候,TIM1、TIM8~TIM…

ComfyUI插件:ComfyUI Impact 节点(一)

前言: 学习ComfyUI是一场持久战,而 ComfyUI Impact 是一个庞大的模块节点库,内置许多非常实用且强大的功能节点 ,例如检测器、细节强化器、预览桥、通配符、Hook、图片发送器、图片接收器等等。通过这些节点的组合运用,我们可以实现的工作有很多,例如自动人脸检测和优化修…

ComfyUI进阶:Comfyroll节点 (最终篇)+应用实例

前言: 学习ComfyUI是一场持久战,而Comfyroll 是一款功能强大的自定义节点集合,专为 ComfyUI 用户打造,旨在提供更加丰富和专业的图像生成与编辑工具。借助这些节点,用户可以在静态图像的精细调整和动态动画的复杂构建方面进行深入探索。Comfyroll 的节点设计简洁易用,功能…

松灵机器人scout mini小车 自主导航(4)——运行lio-sam建图

松灵机器人Scout mini小车运行lio-sam 在之前的工作中,我们已经实现了用小车搭载传感器,采用gmapping建图和navigation导航实现小车在2D环境中自主导航,但是实际我们采用的激光雷达多为三维激光雷达。因此决定采用lio-sam来建图。具体操作步骤如下。 1.下载雷达仿真 1.1下载…

[题解]P2672 [NOIP2015 普及组] 推销员

P2672 [NOIP2015 普及组] 推销员 为了便于操作,将住户信息按疲劳值从大到小排序。 那么对于选\(X\)个住户,有\(2\)种情况:选疲劳值前\(X\)大的住户,答案即为\(\sum\limits_{i=1}^X a[i] + 2\times \max\limits_{i=1}^X s[i]\)。 选疲劳值前\(X-1\)大的住户,然后在剩下的住…

LockSupport

LockSupprot 用来阻塞和唤醒线程,底层实现依赖于 Unsafe 类(后面会细讲)。 该类包含一组用于阻塞和唤醒线程的静态方法,这些方法主要是围绕 park 和 unpark 展开。 public class Main {public static void main(String[] args) {Thread mainThread = Thread.currentThread(…

计算机组成与体系结构-浮点数表示

定点数: 是一种在计算机中表示和处理实数的方法,其中,小数点的位置是固定的,不会随着数值的大小而变化。浮点数: 是计算机中用于表示实数的一种数据类型。小数点 位置浮动浮点数表示阶码(指数部分): 决定了浮点数可以表示的范围。阶码越长,可以表示的指数范围就越大 尾数(有…