JS获取字符串里最长的回文字符串

方法一

使用双指针配合枚举

/*** @param {string} s* @return {string}*/
const longestPalindrome = s => {const LEN = s.lengthif (LEN < 2) {return s}let maxStr = ''/*** @param left * @param right * @returns */const findPalindrome = (left, right) => {while (left >= 0 && right < LEN && s[left] === s[right]) {left--right++}return s.substring(left + 1, right)}for (let i = 0; i < LEN; i++) {// 以i为中心判断是否是回文,如果回文是偶数则i和i+1为中心,负责i为中心。const strOdd = findPalindrome(i, i)const strEven = findPalindrome(i, i + 1)if (strEven.length > maxStr.length) {maxStr = strEven}if (strOdd.length > maxStr.length) {maxStr = strOdd}}return maxStr
}

方法二

动态规划+枚举

/*** @param {string} s */
const longestPalindrome1 = s => {const LEN = s.lengthif (LEN < 2) {return s}// 需要保证s[l]到s[r]为回文则s[l-1]到s[r+1]也是回文,通过二维数组记录lr的回文const dp = []for (let i = 0; i < LEN; i++) {dp[i] = new Array(LEN).fill(false)dp[i][i] = true}let maxStr = s[0]for (let palindromeLen = 2; palindromeLen <= LEN; palindromeLen++) {for (let l = 0; l < LEN; l++) {// 右指针指向的位置应该为左指针加回文串长度减一let r = l + palindromeLen - 1if (r >= LEN) {break}if (s[l] === s[r]) {// 左指针与右指针中间最多为1个的时候可以直接判定为true, ABA 或者 aaif (r - l <= 2) {dp[l][r] = true} else {dp[l][r] = dp[l + 1][r - 1]}} else {dp[l][r] = false}if (dp[l][r] && r - l + 1 > maxStr.length) {maxStr = s.substring(l, r + 1)}}}return maxStr
}

方法三

动态规划+双指针
在这里插入图片描述
s[l][r] 依赖 s[l+1][r-1],说明是依赖上层,所以需要把上层填满,所以r需要递增遍历固定r动l,且l需要小于r,相等的时候在初始化已经做好了。

  const LEN = s.lengthif (LEN < 2) {return s}// 需要保证s[l]到s[r]为回文则s[l-1]到s[r+1]也是回文,通过二维数组记录lr的回文const dp = []for (let i = 0; i < LEN; i++) {dp[i] = new Array(LEN).fill(false)dp[i][i] = true}let start = 0 , end = 0;// l必须小于r从第一层填起可以画三角,s[l]到s[r]依赖s[l-1]到s[r+1]for (let r = 1; r < LEN; r++) {for (let l = r - 1; l >= 0; l--) {if (s[l] === s[r]) {// 左指针与右指针中间最多为1个的时候可以直接判定为true, ABA 或者 aaif (r - l <= 2) {dp[l][r] = true} else {dp[l][r] = dp[l + 1][r - 1]}} else {dp[l][r] = false}if (dp[l][r] && r - l > end - start) {end = r;start = l;}}}return s.slice(start,end+1)

说明

方法一和方法二都可以采用start和end来记位置,最后再去拿到回文字符串。这样减少对字符串的截取,时间会更快。方法一如果记位置则需要改造获取回文的方法并且直接在回文内部去更新start和end。

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

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

相关文章

day32_Git

今日内容 零、 复习昨日 零、 复习昨日 一、引言 在单人开发过程中&#xff0c;需要进行版本管理&#xff0c;以利于开发进度的控制。 在多人开发过程中&#xff0c;不仅需要版本管理&#xff0c;还需要进行多人协同控制。 版本控制(VS) SVN GIT 二、介绍 Git是一个开源的…

rabbitmq-server-3.11.10.exe

rabbitmq需要erlang环境 otp_win64_25.1.exe erlang-CSDN博客 https://www.rabbitmq.com/download.htmlhttps://www.rabbitmq.com/install-windows.htmlhttps://github.com/rabbitmq/rabbitmq-server/releases/download/v3.11.10/rabbitmq-server-3.11.10.exe C:\Users\Admi…

Spine深入学习 —— 换装

Spine深入学习————换装 数据对象和实例对象的关系与区别 数据对象是无状态的&#xff0c;可在任意数量的骨架实例间共用。有对应实例数据的数据对象类名称以“Data”结尾&#xff0c;没有对应实例数据的数据对象则没有后缀&#xff0c;如附件、皮肤及动画。 实例对象有许…

python-GC机制、装饰器、生成器、迭代器、三元表达式、列表生成式、生成器表达式、函数递归、面向对象、

1 基础知识 1.1 GC机制 Python的垃圾回收&#xff0c;其实高级的语言都有自己的垃圾回收机制简称GC&#xff0c; python当中主要通过三种方式解决垃圾回收的方式&#xff0c;引用计数、标记清除、分代回收。引用计数&#xff1a;如果有新的引用指向对象&#xff0c;对象引用计…

产品运营常用的ChatGPT通用提示词模板

产品定位和规划&#xff1a;请帮助我明确产品的定位和规划&#xff0c;包括目标市场、用户需求、竞争对手等方面的内容&#xff0c;以便我能够更好地制定产品运营策略。 产品设计和开发&#xff1a;请帮助我进行产品设计和开发&#xff0c;包括功能设计、界面设计、用户体验等…

Nodejs 第二十章(fs 下)

概述 在 Node.js 中&#xff0c;fs 模块是文件系统模块&#xff08;File System module&#xff09;的缩写&#xff0c;它提供了与文件系统进行交互的各种功能。通过 fs 模块&#xff0c;你可以执行诸如读取文件、写入文件、更改文件权限、创建目录等操作&#xff0c;Node.js …

壹财基金杨振骏:资本如何做好Web3布局?

Web3行业是革命性的时代风口&#xff0c;目前全球各个发达国家都在争先抢占Web3的主导地位。2023年&#xff0c;香港特区政府大力支持Web3行业的政策落地&#xff0c;缔造了良好的发展环境&#xff0c;鼓励有意布局Web3行业的机构和创业者积极参与。 然而&#xff0c;Web3行业…

ply前端

ply 是 eBPF 的 front-end 前端工具之一&#xff0c;专为 embedded Linux systems 开发&#xff0c;采用 C 语言编写&#xff0c;只需 libc 和内核支持 BPF 就可以运行&#xff0c;不需要外部 kernel 模块&#xff0c;不需要 LLVM&#xff0c;不需要 python。 ply 由瑞典工程师…

【数据结构】——排序

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

bugku题解记录2

文章目录 哥哥的秘密黄道十二官where is flag一段新闻 哥哥的秘密 给出了一个qq&#xff0c;那就去看看呗 hint里面说 收集空间信息——相册——收集微博信息——相册——解题——相册——提交flag 那看看空间先 盲文&#xff1a; hint&#xff1a;密码时地人 旗帜存在相册里…

【精选】ATKCK红队评估实战靶场一 超详细过程思路

一、环境搭建 1.红日靶场下载&#xff1a; 靶场下载地址&#xff1a; https://pan.baidu.com/s/1nC6V8e_EuKfaLb2IuEbe7w&shflsharepset 提取码&#xff1a;n1u22.内外网IP搭建 Windows 7 x64Windows Server 2008Win2K3 Metasploitablekali内网IP&#xff1a;192.168.52…

ROS学习笔记(一)- 创建工作空间和功能包

1.工作空间 工作空间(workspace)是一个存放工程开发相关文件的文件夹 • src &#xff1a;代码空间&#xff08;Source Space&#xff09; • build &#xff1a;编译空间&#xff08;Build Space&#xff09; • devel &#xff1a;开发空间&#xff08;Development Spa…

【LeetCode:1657. 确定两个字符串是否接近 | 计数 + 阅读理解】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Ubuntu使用Nginx部署前端项目——记录

安装nginx 依次执行以下两条命令进行安装&#xff1a; sudo apt-get update sudo apt-get install nginx通过查看版本号查看是否安装成功&#xff1a; nginx -v补充卸载操作&#xff1a; sudo apt-get remove nginx nginx-common sudo apt-get purge nginx nginx-common su…

软件工程(十一)

逆向工程 定义 逆向工程 (reverse engineering)&#xff1a;指在软件生存周期中&#xff0c;将软件的某种形式描述转换成更抽象形式的活动 重构 重构 (restructuring&#xff09;&#xff1a;指在同一抽象级别上转换系统的描述形式。如把C程序转换成Java程序 设计恢复 设…

[ffmpeg] aac 音频编码

aac 介绍 aac 简单说就是音频的一种压缩编码器&#xff0c;相同音质下压缩比 mp3好&#xff0c;目前比较常用。 aac 编码支持的格式 aac 支持的 sample_fmts: 8 aac 支持的 samplerates: 96000 88200 64000 48000 44100 32000 24000 22050 16000 12000 11025 8000 7350 通…

PC企业微信http协议逆向接口开发,发送大视频文件

产品说明 一、 hook版本&#xff1a;企业微信hook接口是指将企业微信的功能封装成dll&#xff0c;并提供简易的接口给程序调用。通过hook技术&#xff0c;可以在不修改企业微信客户端源代码的情况下&#xff0c;实现对企业微信客户端的功能进行扩展和定制化。企业微信hook接口…

js字符串分割方法

使用split()方法 这可能是最常见的字符串分割方法&#xff0c;它使用指定的分隔符将字符串拆分为子字符串&#xff0c;并返回一个数组。例如&#xff1a; const str Hello World; const arr str.split( );console.log(arr); // [Hello, World]使用substring()方法 此方法从…

Pycharm中使用matplotlib绘制动态图形

Pycharm中使用matplotlib绘制动态图形 最终效果 最近用pycharm学习D2L时发现官方在jupyter notebook交互式环境中能动态绘制图形&#xff0c;但是在pycharm脚本环境中只会在最终 plt.show() 后输出一张静态图像。于是有了下面这段自己折腾了一下午的代码&#xff0c;用来在pych…

unity学习笔记12

一、物理系统 如何让一个球体受到重力的影响&#xff1f; 只要给物体添加刚体组件&#xff08;Rigidbody&#xff09;&#xff0c;就可以使其受到重力影响 1.刚体&#xff08;Rigidbody&#xff09;&#xff1a; 刚体是一个组件&#xff0c;用于使游戏对象受到物理引擎的控制。…