动态游标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;在同一…

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

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

高德 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;或者也可以视其为一部“为开发者服务简史”。 …

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.永远不要使用一个指向空值的引用。一个引用…

混合云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;包括每天头条热文专题推荐、…

工商银行分布式服务 C10K 场景解决方案

简介&#xff1a; Dubbo 是一款轻量级的开源 Java 服务框架&#xff0c;是众多企业在建设分布式服务架构时的首选。中国工商银行自 2014 年开始探索分布式架构转型工作&#xff0c;基于开源 Dubbo 自主研发了分布式服务平台。 作者 | 颜高飞 来源 | 阿里巴巴云原生公众号 Dubb…

matlab cell转数组_MATLAB批量修改文件名

评论区旁友建议使用narsort排序而不是直接修改文件名。我觉得相关条件下也可以&#xff0c;所以原文末尾加上了narsot排序法。以下是原文2019-05-09最近实验室小可爱帮忙做实验和记录实验数据&#xff0c;不过新手总有些错误操作&#xff0c;比方说因为忘记修改存储路径导致图片…

Spring Cloud Bus 消息总线介绍

简介&#xff1a; 本文配套可交互教程已登录阿里云知行动手实验室&#xff0c;PC 端登录 start.aliyun.com 在浏览器中立即体验。 作者 | 洛夜 来源 | 阿里巴巴云原生公众号 本文配套可交互教程已登录阿里云知行动手实验室&#xff0c;PC 端登录 start.aliyun.com 在浏览器中立…

更灵活的边缘云原生运维:OpenYurt 单元化部署新增 Patch 特性

简介&#xff1a; 在正文开始之前&#xff0c;我们先回顾一下单元化部署的概念和设计理念。在边缘计算场景下&#xff0c;计算节点具有很明显的地域分布属性&#xff0c;相同的应用可能需要部署在不同地域下的计算节点上。 作者 | 张杰&#xff08;冰羽&#xff09; 来源 | 阿里…

Gartner:2022年全球IT支出将超4万亿美元,软件增速最高

编辑 | 宋慧 供稿 | Gartner 根据Gartner的最新预测&#xff0c;2022年全球IT支出预计将达到4.5万亿美元&#xff0c;相比2021年增长5.5%。 Gartner杰出研究副总裁John-David Lovelock表示&#xff1a;“越来越多的企业将构建新技术和软件&#xff0c;而不是购买和部署它们&am…

Flink 实时计算在微博的应用

简介&#xff1a; 微博通过将 Flink 实时流计算框架跟业务场景相结合&#xff0c;在平台化、服务化方面做了很大的工作&#xff0c;在开发效率、稳定性方面也做了很多优化。我们通过模块化设计和平台化开发&#xff0c;提高开发效率。 微博机器学习研发中心数据计算负责人&…