JS程序

2023-11-11

注 题目来源:力扣

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

解题思路:这个题目是直接拍脑袋想法,就是暴力求解

思路是这样,首先创建一个函数,判断一个字串是不是回文数,判断方法为,选出字符串的中间位置下标。如果是奇数位自行取整。然后一个for循环比较前后字符。返回判断结果。接下来,在函数整个方法里面两层for循环,选取字符串s的下标,截取字串。 再调用创建的判断函数进行判断。 至于寻找最长的,那就设置一个maxlen变量保存最长传的长度,再设置一个变量保存字串的值。

很不幸,这个三重for循环的方法超时了。

所以应该选取一个更优的方法,(菜鸡想不到),翻看题解,动态规划方法来了。

主要的思路是这样的,设置一个二维数组dp[i][j]存储 i 到 j 的字串是否是回文字串,当然保存的也就是true|flase。其中有一个条件,就是如果dp[i][j]要成为回文字串,那么只需要s[i]==s[j]和dp[i+1][j-1]是回文字串。可能表述的不是很清楚。(引用一个原答案的图https://leetcode-cn.com/problems/longest-palindromic-substring/solution/5-zui-chang-hui-wen-zi-chuan-by-alexer-660/

假装自己讲清楚了,然后两层for循环有一个坑,就是字串应该由结尾向前遍历,而不是从前向后遍历。举个栗子,如果遍历字符ababd,两层循环从i=0.j=i开始遍历,那么第一次循环aba字串的时候,需要查看b字串是否是回文字串,初始化dp数组的时候当然都是0或者false,你得出的b为false,那么aba字串也就是认定不是回文字串。

相反,如果你结尾开始遍历(i=len-1,j=i),这样的话,结尾字串为aba,你此时b字串的结果已经得出来的b是true。

当然我也只是总结出问题在哪,如何改正。对于这一类问题,如果碰见多了也会进行总结。

下面是代码

/**
 * @param {string} s
 * @return {string}
 */
//可以跑出结果,但是超时
var longestPalindrome = function(s) {
    let ans='',maxlen=0;
    function isPalindrome(str){
        let len=parseInt(str.length/2);
        for(var i=0;i<len;i++){
            if(str[i]!==str[str.length-1-i]){
                return false;
            }
        }
        return true;
    }
    for(let j=0;j<=s.length;j++){
        for(k=j+1;k<=s.length;k++){
            var tmpstr=s.substring(j,k);
            if(isPalindrome(tmpstr)&&(tmpstr.length>maxlen)){
                maxlen=tmpstr.length;
                ans=tmpstr;
            }
        }
    }
    return ans;
};
/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s) {
let arr='',maxlen=0;
let n=s.length;
//二维数组,以及初始化,感觉写的很高大上
let dp=Array.from(new Array(n),() => new Array(n).fill(0));

for(let i=n-1;i>=0;i--){
    for(let j=i;j<n;j++){
        //这行代码真的是太佩服了(还是我太菜)
        dp[i][j]=s[i]==s[j]&&(j-i<2||dp[i+1][j-1]);
        if(dp[i][j]&&j-i+1>arr.length){
            arr=s.substring(i,j+1);
        }
    }
}
return arr;
};

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS程序 的相关文章

  • javascript/jquery 从选择中删除或删除选项

    在某些情况下 我需要从选择中删除选项 基本上 if mystatement true remove item with id option1 from select of id select1 有人知道我可以实现这一目标的代码吗 非常感谢
  • AJAX 安全问题

    我希望能够解决一些关于 AJAX 安全性的问题 这是我试图理解的一个场景 假设我正在使用 AJAX 向页面请求一些半敏感材料 例如 我将把用户的 ID 传递给一个 php 文件 并返回一些关于他们自己的信息 现在 是什么阻止人们模拟此 Ja
  • 检测单选按钮/复选框状态的变化

    我需要可靠地检测页面上单选按钮 复选框的状态变化 以便查看表单是否被修改 现在 这是一个完全独立的脚本 我无法修改任何控制表单的内容 目前 我只能看到两种方法 onchange事件处理程序 有助于处理文本框 文本区域和选择 但不会针对复选框
  • 如何使用多个 select2 框过滤表格?

    我正在尝试使用 和多个 select2 框的类来过滤表格 表格 HTML table class table tbody tr class kanban event Austin td td tr tr class csm event Ch
  • 为什么省略分号会破坏这段代码?

    或者换句话说 为什么分号插入失败 导致下面的代码被破坏 function Foo Foo prototype bar function console log bar lt missing semicolon function Foo pr
  • 如何将值发布到输入框中?

    Intro I would like to get the current time after clicking at click and POST the value into input text box Note 假设包含引导样式表
  • 在上传之前预览图像 VUEjs [重复]

    这个问题在这里已经有答案了 我知道这个问题已经被问过 但我不知道如何在vuejs中使用代码 我尝试了很多但没有任何结果 我还添加了我的代码 有人可以帮帮我吗 这是我的代码 谢谢 html
  • 从选择 onChange 调用 javascript 函数 [重复]

    这个问题在这里已经有答案了 所以我有一个简单的 HTML 选择框和一个 javascript 警报功能 我希望选择框有一个 onchange 事件来调用 javascript 警报函数 这是我到目前为止所拥有的 HTML div Type
  • 检测 Webkit/Chrome 中 HTML5 数字控件更改的事件?

    HTML5 为我们提供了一些新的输入元素 例如
  • 如何将一个数组中的所有项目复制到另一个数组中?

    如何将数组的每个元素 其中元素是对象 复制到另一个数组中 以便它们完全独立 我不想更改一个数组中的元素来影响另一个数组 这里的关键是 数组中的条目是对象 并且 您不希望对一个数组中的对象的修改显示在另一个数组中 这意味着我们不仅需要将对象复
  • EmberJS:对象作为查询参数来刷新模型

    我遵循了查询参数指南 http guides emberjs com v1 11 0 routing query params http guides emberjs com v1 11 0 routing query params 而且效
  • 使用 float:left 与 display:inline-block 的 jQuery UI 拖放排序比较

    我这里有两个例子 这两个例子之间的唯一区别是 一种使用display inline block 另一种使用float left li doc item 显示 内联块 与 li doc item float left 我的问题是 displa
  • Angular 4 Http POST 不起作用

    我希望每个人都做得很好 我最近开始使用 Angular 4 4 我一直在尝试将数据发布到我的 api 服务器 但不幸的是它不起作用 我花了大约两天的时间 但仍然没有成功 甚至已经尝试过 6 7 篇文章角 io https angular i
  • 如何从 CSS 选择器中提取类名?

    故事 我目前正在构建一个 ESLint 规则 以警告在 CSS 选择器定位器中使用引导布局导向和角度技术类 目前我在字符串方法中使用简单的子字符串 for var i 0 i lt prohibitedClasses length i if
  • 了解 Document.createElement()

    我在用着GWT及其底层DOM能力 我基本上想要实现的是 Have a div包含一些文本的元素 其中一些文本将被包围span元素 span 元素可相互拖动并提供上下文菜单 New span元素可以由最终用户动态创建 它可能是这样的 在应用程
  • 如何将MathJax公式转换为img

    Mathjax 现在在我的项目中运行良好 但有一个问题 有没有办法将MathJax的公式 纯html和css 转换成img文件 我可以保存 MathJax 可以配置为生成 SVG 看http docs mathjax org en late
  • vuejs中如何获取组件编译后的html内容

    我有一个这样的组件
  • 如何在 TypeScript 中使用 navigation.replace ?

    我试图在我的代码中使用它 const navigation useNavigation navigation replace AllFriends 但我不断收到错误消息 Property replace does not exist on
  • 将 html 文本框的值分配给 div 的标题

    line 1
  • 为什么 JavaScript 中是 [1,2] + [3,4] = "1,23,4" ?

    我想将一个数组的元素添加到另一个数组中 所以我尝试了以下方法 1 2 3 4 它的回应是 1 23 4 到底是怎么回事 The 操作员没有为数组定义 发生的事情是 JavaScript将数组转换为字符串并将它们连接起来 Update 由于这

随机推荐

  • LeetCode小算法记录(二十二)最长回文串

    给定一个包含大写字母和小写字母的字符串 找到通过这些字母构造成的最长的回文串 在构造过程中 请注意区分大小写 比如 Aa 不能当做一个回文字符串 注意 假设字符串的长度不会超过 1010 示例 1 输入 abccccdd 输出 7 解释 我
  • SpringBoot的完整学习

    springBoot 配置如何编写 yaml 自动装配原理 集成web开发 业务的核心 集成数据库 Druid 分布式开发 Dubbo zookeeper swagger 接口文档 任务调度 SpringSecunity Shiro 1 微
  • Fastadmin开源CRM客户管理系统融合开发呼叫中心系统

    基于Fastadmin中开源CRM客户管理系 并支持小程序端UNIapp 统融合开发呼叫中心系统 在crm管理系统中 并实现了来去电弹屏 网页通话等功能 助力企业销售全流程精细化 数字化管理 全面解决企业销售团队的全流程客户服务难题 帮助企
  • 我的第一个半平面交(1007: [HNOI2008]水平可见直线)

    点击打开链接 Description Input 第一行为N 0 lt N lt 50000 接下来的N行输入Ai Bi Output 从小到大输出可见直线的编号 两两中间用空格隔开 Sample Input 3 1 0 1 0 0 0 S
  • Android EditText设置边框

    Android EditText设置边框 简介 Android应用程序中给EditText设置边框 效果图 快速开始 在res drawable目录下新建样式文件 edit background xml
  • iphone彻底删除照片如何恢复_想要从iPhone恢复永久删除的照片,这些方法一定要掌握...

    当你不小心删除了iPhone上的照片 你一定非常伤心难过 因为这些照片都是你生活点滴最好的见证 有你太多的回忆 今天小编将向您展示如何从iPhone恢复已删除的照片 如何在iPhone上还原照片以及防止其再次发生的最佳方法 从iPhone恢
  • 报错:StandardServletMultipartResolver : Failed to perform cleanup of multipart items

    报错 在文件上传接口 解析文件的时候报错 报错信息如下 s w m s StandardServletMultipartResolver Failed to perform cleanup of multipart items java i
  • idea工程在maven projects中显示灰色的解决办法

    在Mac上使用idea进行开发的过程中 一般在MavenProject中包含四个文件如下 1 profile 2 WebMavenTest 工程名 3 WebMavenTestSdk 工程名SDK 4 WebMavenTestService
  • 台式计算机显卡最高温度多少,台式机显卡温度多少是正常的(揭晓显卡正常温度度数)...

    PS 本文只讨论台式机 笔记本与台式机相比性能是偏低的 所以只要保证风扇能正常运转的话 基本上不会出现烧坏的情况 温度多少算正常 要知道电脑的硬件温度是不是过高 首先要了解硬件的正常温度范围 1 CPU 在电脑仅仅保持开机的情况下 一般是3
  • VLC打不开视频文件调试技巧

    用VLC打开TS文件 如果只有视频流的话可以打开 添加进了SRT字幕 打开失败 暴风 QQ影音 KMPlayer都可以正常打开 查询原因 下面是一个VLC自带的查询功能 或按快捷键Ctrl M 打开后的界面如下 注意下面的冗长等级是关键 它
  • 第1章 创建一个html网页

    创建一个html网页 目录标题 1 1认识html 1 2html标签 1 3html文件的基本结构 1 4Chrome的开发者工具 1 5在记事本中编写HTML文件 1 6使用编辑器创建HTML文档 1 6 1下载Hbuilder X 1
  • 位运算符详细解析

    位运算符计算 先把十进制转为二进制 计算完在转回十进制 以下位转换和计算规则 进制和 进制的转换 进制转 进制 标数除以2 若能除尽 该位记做0 若除不尽 该位记做1 再对商继续除以2 以 此类推 直到商为0 然后把每 位的结果反序组合就是
  • ROS语音更改API

    1 准备工作 申请科大讯飞帐号 下载SDK 打开 讯飞官网 创建语音合成需求 下载sdk 其中有libs库 并记录相应的appid 用于后续文件使用 下载的sdk中内容如下 我们将用到libs库中的文件 还需要更改 asr tts 两个文件
  • 【Linux 驱动篇(三)】新字符设备驱动

    文章目录 一 新字符设备驱动原理 1 分配和释放设备号 2 新的字符设备注册方法 2 1 字符设备结构 2 2 cdev init 函数 2 3 cdev add 函数 2 4 cdev del 函数 二 自动创建设备节点 1 mdev 机
  • 从0开始学习JavaScript--初识JavaScript

    一 JavaScript简介 1 JavaScript的起源 avaScript最初由Netscape的Brendan Eich设计 最初将其脚本语言命名为LiveScript 后来Netscape在与Sun合作之后将其改名为JavaScr
  • chatgpt网页版替代方法

    从昨天网上开始一直开着的chatgpt网页突然打不开了 提示1020错误 尝试换了不同代理软件或者代理地点仍然无法解决 也搜了很多资料 比如删除cookie 重启浏览器 更换浏览器等均不起作用 至今仍无法解决 具体错误内容如下 Access
  • 输入yum命令报错:Loaded plugins: fastestmirror You need to be root to perform this command.

    解决方法 是提示要获取root权限 输入su 回车输入密码即可
  • 计算机网络-子网划分(子网地址、广播地址、子网掩码)

    子网划分 题目 办公室内有一台计算机 IP地址为192 45 165 243 子网掩码为255 255 255 224 则该机所在的网络属于哪类网络 其网络是否进行了子网划分 若划分 则分为几个网络 并写出每个子网号 改机的子网号和广播地址
  • LFU算法族:window-LFU

    LFU算法族相关文章目录汇总 LFU算法 LFU Aging算法 window LFU算法 本文 1 LFU算法的不足 LFU Least Frequently Used 是一种缓存淘汰算法 LFU算法是根据缓存的访问频率 去淘汰访问次数最
  • JS程序

    注 题目来源 力扣 给定一个字符串 s 找到 s 中最长的回文子串 你可以假设 s 的最大长度为 1000 示例 1 输入 babad 输出 bab 注意 aba 也是一个有效答案 解题思路 这个题目是直接拍脑袋想法 就是暴力求解 思路是这