leetcode 05 回文字符串

leetcode 05 回文字符串

1. 描述

给你一个字符串,找到里面最长的回文字符串

2. 事例

示例 1:

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

示例 2:

输入:s = "cbbd"
输出:"bb"

3. 思路

3.1 什么是回文字串

abba
abcba

我们把这种不管是从前到后读还是从后到前读都是一样的单词叫做回文字串

3.2 思路

3.2.1 dp数组

明确一个dp数组,即当前dp数组每个下标对应的含义

dp[i][j] 表示s的前i个字符到j个字符是否符合回文字串。
字符串ábcba
下标01234
i/j01234
0TrueFalseFalseFalseTrue
1TrueFalseTrueFalse
2TrueFalseFalse
3TrueFalse
4True
3.2.2 怎么判断当前子串是回文字串。

d p [ i ] [ j ] = s [ i ] = = s [ j ] a n d s [ i + 1 ] [ j − 1 ] o r j − 1 < = 2 dp[i][j] = s[i] == s[j] and s[i+1][j-1] or j - 1 <= 2 dp[i][j]=s[i]==s[j]ands[i+1][j1]orj1<=2

假设我现在有个字符串aba

当s[i]和s[j]等于当时候,我们就需要判断从i到j里面包含了几个字符。

比如当i = 0 j = 2当是时候,如果s[i] = s[j] 就只需要判断里面的元素是否大于1了,我们就可以得到一个公式。
j − i < = 2 j - i <= 2 ji<=2

如果这个公式成立的话,并且s[i] = s[j] 那么就是一个回文字串。

只需要判断s[i] == s[j] 并且 s[i + 1] [j - 1] 或者 j - i <= 2。

3.3.3 怎么取最大的回文字串。

我们上面知道了怎么判断字串是回文字串,我们就可以先定义一个left,并记录一个最大的长度。然后每次是回文字串的时候判断是否大于已经记录的,如果大于则就进行替换,如果小宇我们就跳过。

注意!!! 这里我们要注意下。

这里的最大长度应该好似j - i + 1.

3.3.4 代码编写
3.3.4.1 python
def longestPalindrome(s: str) -> str:if len(s) <= 1:return sleft = 0maxLength = 1dp = [[False for i in range(len(s))] for i in range(len(s))]for j in range(1, len(s)):for i in range(j):if s[i] != s[j]:continueelse:dp[i][j] = dp[i + 1][j - 1] or j - i <= 2if dp[i][j] and j - i + 1 > maxLength:left = imaxLength = j - i + 1return s[left: left + maxLength]
3.3.4.2 typescript
onst longestPalindrome = (s: string): string => {if (s.length <= 1) return s;let left = 0, maxlength = 1;const dp = new Array(s.length).fill(0).map(item => new Array(s.length).fill(false));for (let j = 1; j < s.length; j++) {for (let i = 0; i < j; i++) {if (s[i] !== s[j]) continue;dp[i][j] = dp[i + 1][j - 1] || j - i <= 2;if (dp[i][j] && j - i + 1 > maxlength) {maxlength = j - i + 1;left = i;}}}return s.slice(left, left + maxlength)
}
java
 public static String longestPalindromeV2(String s) {int left = 0;int maxLength = 1;boolean[][] dp = new boolean[s.length() + 1][s.length() + 1];if (s.length() <= 1) return s;for (int j = 1; j < s.length(); j++) {for (int i = 0; i < j; i++) {if (s.charAt(i) != s.charAt(j)) {continue;} else {dp[i][j] = dp[i + 1][j - 1] || j - i <= 2;}if (dp[i][j] && j - i + 1 > maxLength) {maxLength = j - i + 1;left = i;}}}return s.substring(left, left + maxLength);}

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

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

相关文章

使用idea创建JDK8的SpringBoot项目

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 使用idea创建JDK8的SpringBoot项目 前言我们经常在创建新的springboot项目&#xff0c;默认使用的是spring.io进行创建&#xff0c;但是它总是只会提供高版本的创建方式&…

U9多组织销退业务流程的总结

多组织销退业务流程&#xff0c;它的运行模式也是奇葩&#xff0c;确实不好理解其中的道理。用户实践中更是障碍重重&#xff0c;束手无策。左也不是右也不是&#xff0c;无路可走。 不能理解透彻造成的吧&#xff0c;所以做一个总结。 既有退货&#xff0c;必有出货单。从出货…

cudnn版本gpu架构

nvcc --help 可以看 --gpu-architecture 写到的支持的架构 NVIDIA 的 GPU 架构是按代次发布的&#xff0c;以下是这些架构的对应说明&#xff1a; NVIDIA Hopper: 这是 NVIDIA 于 2022 年推出的架构之一&#xff0c;面向高性能计算&#xff08;HPC&#xff09;和人工智能&…

Prompt格式到底有多重要?它竟然这样影响LLM函数调用能力(附提示词模版)

函数调用能力的关键地位 在当前大语言模型&#xff08;LLM&#xff09;的应用生态中&#xff0c;函数调用能力&#xff08;Function Calling&#xff09;已经成为一项不可或缺的核心能力。它使LLM能够通过调用外部API获取实时信息、操作第三方服务&#xff0c;从而将模型的语言…

有了chatgpt4o,普通人还需要学代码吗?

或许AI到达“终极智能”时&#xff0c;普通人就不用学代码了。不过现阶段或很长的一段时间内这还是不可能的。目前AI编程还是以辅助编程为主&#xff0c;普通人可以借助AI实现一些简单的编程。 其实这个问题可以扩大到AI编程的出现对编程行业或程序员职业影响的问题。就这个问…

CE8.【C++ Cont】练习题组6

目录 1.矩阵转置 题目描述 输入格式 输出格式 输入输出样例 错误代码 提交结果 正确代码 提交结果 2.图像相似度 题目描述 输入格式 输出格式 输入输出样例 代码 提交结果 3. 计算矩阵边缘元素之和 题目描述 输入格式 输出格式 输入输出样例 说明/提示 …

哪个网页版思维导图好用?这5款高效软件不容错过!

眼下虽然每个人的电脑硬盘越来越大&#xff0c;但很多人还是保留着“能不装软件就不装”的理念&#xff0c;在选择办公软件时&#xff0c;会更倾向于选用推出了网页版的软件&#xff0c;这对思维导图来说也不例外。 那具体到思维导图网页版&#xff0c;有哪些软件值得推荐&…

【双指针算法】--复写零

文章目录 1. 题目2. 题目解析3. 代码 1. 题目 在线oj 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&#xff1a;请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改&a…

石岩基督教福音堂

周末娃&#xff0c;娃的阿婆和我一起去石岩基督教福音堂做礼拜。 这是我第一次进入石岩的教堂。教堂很高。应该有3,4层楼高。 这周末做礼拜的人很多一楼人满了&#xff0c;阿婆去二楼做礼拜&#xff0c;娃和我去三楼的儿童室。很多家长楼下做礼拜&#xff0c;小朋友被安排三楼…

Flutter 异步编程简述

1、isolate 机制 1.1 基本使用 Dart 是基于单线程模型的语言。但是在开发当中我们经常会进行耗时操作比如网络请求&#xff0c;这种耗时操作会堵塞我们的代码。因此 Dart 也有并发机制 —— isolate。APP 的启动入口main函数就是一个类似 Android 主线程的一个主 isolate。与…

IDEA用jformdesigner插件做管理系统MVC架构

在 IntelliJ IDEA 中结合 JFormDesigner 插件&#xff0c;通过 Swing 框架实现一个管理系统的 MVC 架构是一种经典的开发方式。以下是具体的步骤和实现思路&#xff0c;包含从项目创建到 MVC 架构的核心代码实现。 1. 项目结构设计 为了清晰的 MVC 分层架构&#xff0c;建议按…

Linux内核调度优先级详解:如何优化你的系统性能

个人主页&#xff1a;chian-ocean 文章专栏-Linux 前言&#xff1a; 进程优先级调度是操作系统中的一种调度机制&#xff0c;其核心是为每个进程分配一个 优先级&#xff08;Priority&#xff09;&#xff0c;然后根据优先级的高低决定进程执行的顺序和时间。这种机制确保了关…

Axure RP9 的详细安装及Axure入门应用

文章目录 一、Axure 是什么?二、Axure 的应用场景三、Axure 安装1. 下载安装2. 汉化授权 附&#xff1a;下载链接 一、Axure 是什么? 1、Axure 是一种强大的原型设计工具&#xff0c;它可以帮助设计师和产品经理快速创建交互式的、高保真度的原型&#xff0c;并进行用户体验…

pro文件转换为CMakeLists.txt文件,QT官方工具使用教程

某些情况需要使用cmake&#xff0c;如果手动将QT的pro文件转换成CMakeLists.txt&#xff0c;简短一点的pro还好&#xff0c;如果是比较复杂的pro&#xff0c;手动转换的时候需要长时间的debug&#xff0c;本人深有感受。 工具介绍&#xff1a; qmake2cmake工具创建一个CMakeL…

CDN信息收集(小迪网络安全笔记~

免责声明&#xff1a;本文章仅用于交流学习&#xff0c;因文章内容而产生的任何违法&未授权行为&#xff0c;与文章作者无关&#xff01;&#xff01;&#xff01; 附&#xff1a;完整笔记目录~ ps&#xff1a;本人小白&#xff0c;笔记均在个人理解基础上整理&#xff0c;…

深度学习实战车辆目标跟踪【bytetrack/deepsort】

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对车辆目标数据集进行训练和优化&#xff0c;该数据集包含丰富的车辆目标图像样本…

windows使用zip包安装MySQL

windows通过zip包安装MySQL windows通过zip包安装MySQL下载MySQL的zip安装包创建安装目录和数据目录解压zip安装包创建配置目录 etc 和 配置文件 my.ini安装MySQL进入解压后的bin目录执行命令初始化执行命令安装 验证安装查看服务已安装 启动MySQL查看服务运行情况修改密码创建…

Dots 常用操作

游戏中有多个蚂蚁群落&#xff0c;每个蚂蚁属于一个群落&#xff0c;如何设计数据结构&#xff1f; 方法1&#xff1a;为蚂蚁组件添加一个属性 ID&#xff0c;会造成逻辑中大量分支语句&#xff0c;如果分支语句逻辑不平衡可能带来 Job 调度问题&#xff0c;每个蚂蚁会有一份蚂…

Django 后端数据传给前端

Step 1 创建一个数据库 Step 2 在Django中点击数据库连接 Step 3 连接成功 Step 4 settings中找DATABASES Step 5 将数据库挂上面 将数据库引擎和数据库名改成自己的 Step 6 在_init_.py中加上数据库的支持语句 import pymysql pymysql.install_as_MySQLdb()Step7 简单创建两列…

BaseCTF_web_week3

复读机 输入的东西会在下方显示出来&#xff0c;wp说是简单的SSTI&#xff0c;这里来学习一下SSTI SSTI模板注入 根据My4n师傅的《超详细SSTI模板注入漏洞原理讲解_ssti注入-CSDN博客》写的 用户的输入返回时会经过一个模板渲染&#xff0c;SSTI漏洞就是用户插入了可以破坏模板…