动态游标for循环_【【动图算法】(动态规划篇):最长回文子串

035cdf99c165bb99f5a4463f26ed4757.png

本周继续做一道动态规划类型的题目,该题是阿里一面的一道算法题。

【动图算法】(动态规划篇):最长回文子串

leetcode 5 题:最长回文子串
https://leetcode-cn.com/problems/longest-palindromic-substring/

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

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

??
输入: "cbbd"
输出: "bb"

解答过程

动态规划-数组维护

var longestPalindrome = function(s) {
    let n = s.length
    let res = ''
    // 初始化一个n*n的二维数组
    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             dp[i][j] = s[i] == s[j] && (j - i 2 || dp[i+1][j-1])
            if(dp[i][j] && j - i +1 > res.length)
                res = s.substring(i,j+1)
        }
    }
    return res
};
16437bf5ce307190b0c632f67c3fecac.gif

由动图可以很清楚的看到:

  • 首先初始化了一个n*n的二维数组
  • 而后在循环中进行判断:
    • 这里着重看 dp[i][j] = s[i] == s[j] && (j - i < 2 || dp[i+1][j-1])这里。
    • dp[i][j] = s[i] == s[j]判断为当前项是否为回文。
    • j - i < 2 判断其是否为最小奇偶字符串,即长度小于2
    • 若前一条不满足,则判断dp[i+1][j-1] 即其前一项是否依然为回文。

动态规划-中心扩展

var longestPalindrome = function(s) {
    if(!s || s.length 2) return s
    let start = 0,end = 0;
    let n = s.length
    // 中心扩展法
    let centerExpend = (left,right) => {
        while(left >= 0 && right             left--
            right++
        }
        return right - left - 1
    }
    for(let i = 0;i         let len1 = centerExpend(i,i)
        let len2 = centerExpend(i,i+1)
        let maxLen = Math.max(len1,len2)
        if(maxLen > end - start){
            // 这里的(maxLen - 1) >> 1即为对(maxLen-1)/2而后向下取整
            start = i - ((maxLen - 1) >> 1)
            end = i + (maxLen >> 1)
        }
    }
    return s.substring(start,end+1)
};
  • 这里以i作为中心点,在for循环中len1len2分别判断了奇偶字符串是否为回文。
  • 而后判断长度,截取字符串

相较于前一种方法,该方法则更为简单直观:通过中心点向数组的两端发散计算出回文的长度。最终得到正确的结果。

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

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

相关文章

企业上云如何对SLS日志审计服务进行权限控制

简介&#xff1a; 日志审计是信息安全审计功能的核心部分&#xff0c;是企业信息系统安全风险管控的重要组成部分。SLS的日志审计服务针对阿里云的多种云产品&#xff08;Actiontrail、OSS、SLB、RDS、PolarDB、SAS、WAF等&#xff09;提供了一站式的日志收集、存储、查询、可视…

分区取模分库分表策略:多表事务分库内闭环解决方案

简介&#xff1a; 当表数据超过一定量级&#xff0c;就需要通过分表来解决单表的性能瓶颈问题&#xff1b;当数据库负载超过一定水平线&#xff0c;就需要通过分库来解决单库的连接数、性能负载的瓶颈问题。本文将阐述在不同情况下&#xff0c;让不同数量级表&#xff0c;在同一…

mysql使用的索引长度_MySQL索引的索引长度问题

MySQL索引的索引长度问题: Specified key was too long;max key length is 1000 bytes.一、修改mysql的默认存储引擎&#xff1a;1、查看mysql存储引擎命令&#xff0c;在mysql>提示符下搞入show engines;字段 Support为:Default表示默认存储引擎2、设置InnoDB为默认引擎&am…

漫画:什么是“贪心算法”?如何求解“部分背包问题”?

作者 | 小灰来源 | 程序员小灰————— 第二天 —————————————————. . . . . . . .我们回到刚才的题目当中&#xff0c;假设背包的容量是10&#xff0c;有5个商品可供选择&#xff0c;每个商品的价值和重量如图所示&#xff1a;让我们来计算一下每件物品的…

python函数案例名片管理器_python案例:实现一个函数版的名片管理系统

本案例使用了自定义函数以及对字符串的常见操作、判断语句和循环语句等知识。要求必须使用自定义函数&#xff0c;完成对程序的模块化。名片信息至少包括&#xff1a;姓名、电话、住址。必须完成的功能&#xff1a;增、删、改、查、退出。分析首先呢&#xff0c;我们应该先定义…

高德 Serverless 平台建设及实践

简介&#xff1a; 高德为什么要搞 Serverless/Faas&#xff1f;是如何做 Serverless/Faas 的&#xff1f;技术方案是什么样的&#xff1f;目前进展怎么样&#xff1f;后续又有哪些计划&#xff1f;本文将和大家做一个简单的分享。 作者 | 邓学祥&#xff08;祥翼&#xff09; 来…

谷歌自研 Tensor 芯片,8核CPU,20核GPU……

作者 | 禾木木 出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09; 10 月 20 日&#xff0c;谷歌在发布会上推出了全新 Pixel 6 和 Pixel 6 Pro 手机。虽然在推出之前&#xff0c;就已经知晓了外观&#xff0c;该说不说这款手机还是很吸引人的。 在这些变化…

云厂商下一块必争之地就是它了!

简介&#xff1a; 继容器编排、AI 工程化之后&#xff0c;全球顶级云厂商都瞄准了这块无人区。 作者 | 太浪 继容器编排、AI 工程化之后&#xff0c;全球顶级云厂商都瞄准了这块无人区。 1 回顾云计算十几年的历史&#xff0c;或者也可以视其为一部“为开发者服务简史”。 …

python编程中条件句_简单讲解Python编程中namedtuple类的用法

Python的Collections模块提供了不少好用的数据容器类型&#xff0c;其中一个精品当属namedtuple。namedtuple能够用来创建类似于元祖的数据类型&#xff0c;除了能够用索引来访问数据&#xff0c;能够迭代&#xff0c;更能够方便的通过属性名来访问数据。在python中&#xff0c…

shell 如何调用多个脚本

简介 这篇文章主要描述如何通过主脚本去调用其他脚本中的方法&#xff0c;调用的过程中可能出现哪些坑&#xff0c;如何避免。 目录 1. 主脚本调用其他脚本的方法 1.1. bash方法 1.2. source方法 2. 避坑技巧 2.1. 路径配置无效 2.2. source变量冲突 3. 总结 1. 主脚本调…

es对已有的索引给主键_ES中对索引的相关操作

写在前面&#xff1a;本文ES版本为&#xff1a;6.4.2(单机)&#xff0c;并安装了head插件&#xff0c;运用postman进行操作。也可以使用head插件在前端浏览器中进行傻瓜式操作&#xff0c;后续会介绍这种方式&#xff01;如果没有安装es和head插件的话&#xff0c;请先安装&…

“华为云-东吴杯”圆满成功,顶尖参赛者推动“智造”场景结构升级

2021年10月9日&#xff0c;“华为云-东吴杯”2021数字化转型创新应用大赛&#xff08;以下简称“华为云-东吴杯”&#xff09;的最终决赛如期上演&#xff0c;给来自创客赛道和企业赛道的顶尖开发者及团队搭建了一个绝佳的舞台&#xff0c;令其充分展示投身数字化转型领域所获得…

云原生下的灰度体系建设

简介&#xff1a; 本篇文章&#xff0c;我们将继续为大家介绍 ASI SRE&#xff08;ASI&#xff0c;Alibaba Serverless infrastructure&#xff0c;阿里巴巴针对云原生应用设计的统一基础设施&#xff09; 是如何探索在 Kubernetes 体系下&#xff0c;建设 ASI 自身基础设施在大…

引用和指针的区别都有什么_C++指针与引用的区别

指针与引用是C中两个很重要的概念&#xff0c;它们功能看过去很相似&#xff0c;就是都是间接引用某个对象&#xff0c;那么我们应该在什么时候使用指针&#xff0c;什么时候使用引用呢&#xff0c;下面请允许我慢慢道来&#xff1a;1.永远不要使用一个指向空值的引用。一个引用…

java 寻找峰值峰谷_寻找峰值

## 寻找最后的山峰# param a int整型一维数组# return int整型#class Solution:def solve(self , a ):# write code herepackage main/*** 寻找最后的山峰* param a int整型一维数组* return int整型*/func solve( a []int ) int {// write code here}/*** 寻找最后的山峰* par…

Gartner发布2022年IT十大战略预测,每家公司都是技术型公司

编辑 | 宋慧 供稿 | Gartner Gartner于今日发布对2022年及以后的十大战略预测。Gartner的十大预测从三个方面探讨了企业和IT领导人在持续中断和不确定性中获得的经验教训。这三个方面分别是&#xff1a;朝以人为本的方向推进、努力提高韧性以及超越期望的能力。 Gartner杰出研…

混合云K8s容器化应用弹性伸缩实战

简介&#xff1a; 混合云K8s容器化应用弹性伸缩实战1. 前提条件 本最佳实践的软件环境要求如下&#xff1a; 应用环境&#xff1a; ①容器服务ACK基于专有云V3.10.0版本。 ②公共云云企业网服务CEN。 ③公共云弹性伸缩组服务ESS。 配置条件&#xff1a; 1&#xff09;使用专有云…

lodop打印不显示页码_Excel|13个Excel打印技巧汇总,打印技巧大全

打印技巧是工作必备&#xff0c;无需理由&#xff01;很多时候大家得不到想要的打印效果&#xff0c;偶尔打印一两张表格&#xff0c;会出现各种状况&#xff1a;标题行不见了&#xff1f;打印范围错了&#xff1f;页眉页脚不对&#xff1f;打印一个内容&#xff0c;总得弄出一…

关于写好文章的3个心法和5点技巧

简介&#xff1a; 技术类文章最需要的是扎实的经验累积、深度思考和精益求精的精神&#xff0c;这些技巧&#xff0c;希望能够锦上添花。 作者 | 双宏 来源 | 阿里技术公众号 我是双宏&#xff0c;负责阿里巴巴内部技术人社区的内容运营&#xff0c;包括每天头条热文专题推荐、…

mysql 端口 telnet 不通_3306端口不通,不一定是网络的问题

今天,开发需要申请一个账号:test@192.168.84.88 。连接时报了以下错误: Warning: Using a password on the command line interface can be insecure. ERROR 2003 (HY000): Cant connect to MySQL server on 192.168.84.87 (111) 遇到连接失败,首先就是 ping 192.168.84.87…