代码随想录刷题|LeetCode 647. 回文子串 516.最长回文子序列

news2024/7/4 6:22:56

647. 回文子串

题目链接:https://leetcode.cn/problems/palindromic-substrings/

思路

动态规划思路

1、确定dp数组

布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。

2、确定递推公式

有两种情况:

  • s[i] 与 s[j] 相等
    • 情况一:下标 i 和下标 j 相同
      • 表示同一个字符,是回文子串,dp[i][j] = true;
      • j - 1 = 0
      • 比如: 'a','b'
    • 情况二:下标 i 和下标 j 相差 1,或者相差2
      • 表示两个相同的字符串,是回文子串,dp[i][j] = true;
      • j - 1 = 1 , 比如'aa','bb','cc'
      • j - 1 = 2,比如’aca‘,'brb'
    • 情况三:下标 i 和下标 j 相差大于 1 
      • 此时就要看除了 s[i] 与 s[j] ,剩余的其他部分是不是回文子串,看看dp[i + 1][j - 1]是否为true
      • j - 1 > 2
  • s[i] 与 s[j] 不相等
    • 这种情况就说明已经不是回文子串了,所以是false

3、初始化dp数组

        dp[i][j]初始化为false

4、确定遍历顺序

        递推公式中,有一种是需要从一种状态到另一种状态的
        

        如果是从上到下,从左到右,是不行的,因为下面的还没有计算出来的结果,所以这个遍历顺序不可以

        所以一定要从下到上,从左到右遍历,这样保证dp[i + 1][j - 1]都是经过计算的

回文子串

动态规划

class Solution {
    public int countSubstrings(String s) {
        int len = s.length();
        int ans = 0;

        if (s == null || len < 1) {
            return 0;
        }

        // 创建dp数组
        // dp[i][j]:s字符串下标i到下标j的字串是否是一个回文串,即s[i, j]
        boolean[][] dp = new boolean[len][len];

        // 推导dp公式
        for (int j = 0; j <len; j++) {
            for (int i = 0; i <= j; i++) {
                // 当两端字母一样时,才可以两端收缩进一步判断
                if (s.charAt(i) == s.charAt(j)) {
                    if (j - i < 3) {
                        dp[i][j] = true;
                    } else {
                        dp[i][j] = dp[i+1][j-1];
                    }
                } else {
                    dp[i][j] =false;
                }
            }
        }

        for (int i = 0; i < len; i++) {
            for (int j = 0; j < len; j++) {
                if (dp[i][j]) {
                    ans++;
                }
            }
        }

        return ans;
    }
}

516.最长回文子序列

题目链接:https://leetcode.cn/problems/longest-palindromic-subsequence/

思路

跟上一个题目的不同的是,上一题是 回文子串,回文子串是连续的;这一道题目是回文子序列,回文子序列可以不是连续的

1、确定dp数组

        dp[i][j]:字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j]

2、确定递推公式

有两种情况:

  • s[i] 与 s[j] 相等
    • 那么,就在之前的基础上,添加上这两个相同的字符串个数
    • dp[i][j] = dp[i + 1][j - 1] + 2;
  • s[i] 与 s[j] 不相等
    • 此时,s[i]和s[j]的同时加入 并不能增加[i,j]区间回文子串的长度,那么分别加入s[i]、s[j]看看哪一个可以组成最长的回文子序列
    • 加入s[j]的回文子序列长度为dp[i + 1][j]
    • 加入s[i]的回文子序列长度为dp[i][j - 1]
    • dp[i][j]一定是取最大的,即:dp[i][j] = max(dp[i + 1][j], dp[i][j - 1])

3、初始化dp数组

        根据递推公式

4、遍历顺序

最长回文子序列

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

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

相关文章

【真的?】用 ChatGPT 写一篇 Python 翻译库博客,可以打 9 分

今天来个大的实践项目&#xff0c;用 ChatGPT 写一篇博客&#xff0c;冲击一下热榜&#xff01; 从零开始玩 ChatGPT⛳️ ChatGPT 亮点⛳️ 账号篇⛳️ 第一次使用⛳️ 用 Python 实现一个英汉互译的小程序⛳️ googletrans 库核心用法⛳️ 再补充一些知识点⛳️ googletrans 和…

功率放大电路和电压放大电路的区别是什么意思

功率放大电路和电压放大电路都属于模拟电路&#xff0c;是工程师日常经常用到的比较常见的模拟电路&#xff0c;很多小白工程师对于功率放大电路和电压放大电路的区别都很好奇&#xff0c;下面就来看看区别有哪些。 图&#xff1a;功率放大电路与电压放大电路对比 1、功能和基本…

docker之网络配置

目录一、网络模式1.bridge模式(默认模式)2.host模式3.初识网络模式二、bridge模式三、host模式四、自定义网络一、网络模式 Docker在创建容器时有四种网络模式&#xff1a;bridge/host/container/none&#xff0c;bridge为默认不需要用–net去指定&#xff0c;其他三种模式需要…

微服务框架 SpringCloud微服务架构 19 文档操作 19.2 修改文档

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构19 文档操作19.2 修改文档19.2.1 修改文档19.2.2 总结19 文档操作 19.2 修…

推荐一款超级好用的工具:uTools详解使用

介绍 uTools 是什么&#xff1f;下载并安装uTools 能做什么&#xff1f;一切皆插件超级面板 uTools 是什么&#xff1f; uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件&#xff0c;打造你得心应手的工具集合。 通过快捷键&#xff08;默认 alt…

红队隧道应用篇之CS正反向连接突破内网(二)

正向连接 环境拓扑图 操作步骤 在CS客户端新建一个TCP协议的监听, 监听端口为4444 创建无状态木马(Windows Executable(S)), 选择上述建立的TCP监听器, 随后将无状态木马放到不出网的内网主机中去运行, 运行后内网主机就会监听本机的4444端口 在web服务器的beacon命令行输入:…

EMQX安装与使用

EMQX文档&#xff1a;https://www.emqx.io/docs/zh/v5.0/ 1.安装 https://www.emqx.io/zh/downloads 找到自己合适的平台和版本安装 ①&#xff1a;后台启动 emqx start启动成功后可以使用 emqx ping 命令检测节点运行状态&#xff0c;返回 pong 则表示正常运行&#xff1a; …

pmp 证书到底有什么用处?

PMP 证书最重要的两个用处&#xff1a;一个是岗位招聘要求&#xff0c;一个是项目招标要求。 一、PMP证书的应用 1、PMP 证书的敲门砖作用 前面说的&#xff0c;PMP 作为项目管理领域的一个权威公认证书&#xff0c;很多行业要求项目管理岗位人才都会加一条"具备PMP 等证…

Redis vs MongoDB

Redis vs MongoDB 通常情况下&#xff0c;应用系统的技术选型&#xff0c;对于如何选择非关系型数据库&#xff0c;是一个不小的挑战。这不仅考验架构师在技术上的广度和深度&#xff0c;同时也考究对业务细节了解和熟悉程度。只有将业务场景、业务特点、数据特征跟具体的技术…

数据挖掘与机器学习课程总结

2022.11月 文章目录一、引言1.1 数据中的知识发现包括哪几个步骤&#xff1f;(Knowledge Discovery from Data, KDD)1.2 数据挖掘应用二、学习的可行性2.1 Hoeffding 不等式&#xff08;Hoeffding’s Inequality&#xff09;2.2 用 Hoeffding 不等式说明学习的可行性三、数据和…

浅学Linux内核MMU

1 MMU基本知识 1.1 什么是MMU MMU是 MemoryManagementUnit 的缩写即&#xff0c;内存管理单元. 针对各种CPU, MMU是个可选的配件. MMU负责的是虚拟地址与物理地址的转换. 提供硬件机制的内存访问授权.&#xff08;现代 CPU 的应用中&#xff0c;基本上都选择了使用 MMU&#…

【Paper】2021_具有输入饱和的多智能体系统非负连边比例一致性研究_范志鹏

范志鹏. 具有输入饱和的多智能体系统非负连边比例一致性研究[D].华中科技大学,2021.DOI:10.27157/d.cnki.ghzku.2021.001324. 文章目录3 基于状态反馈的线性离散正系统连边比例一致性控制3.1 引言3.2 基于状态反馈的离散时间连边比例一致性的问题描述3.3 无向网络离散时间连边比…

JavaScript中的localStorage

JavaScript中的localStorage 参考这篇文章一起学习&#xff1a;JavaScript中的session 案例池子&#xff1a; JS实现鼠标悬停变色 JavaScript中的排他算法实现按钮单选 JavaScript中的localStorage JavaScript中的sessionStorage JavaScript实现网页关灯效果 JavaScript实…

Codeforces Round #836 (Div. 2) D. Range = √Sum

翻译&#xff1a; 给你一个整数&#x1d45b;。找到一个由&#x1d45b;不同整数组成的序列&#x1d44e;1&#xff0c;&#x1d44e;2&#xff0c;…&#xff0c;&#x1d44e;&#x1d45b;&#xff0c;使得对于所有&#x1d456;和 马克斯(&#x1d44e;1&#x1d44e;2,……

Qt-数据库开发-QTableView操作数据库(1)

Qt-数据库开发-QTableView操作数据库 文章目录Qt-数据库开发-QTableView操作数据库1、概述2、实现效果3、主要代码4、完整源代码更多精彩内容&#x1f449;个人内容分类汇总 &#x1f448;&#x1f449;数据库开发 &#x1f448; 1、概述 这是通过学习Qt官方Demo产生的一个示例…

【爬虫5年保更新专栏】异步协程典型案例,一篇掌握~

最近收到 C 友反馈&#xff0c;说 《听说过 python 协程没&#xff1f;听说过 asyncio 库没&#xff1f;都在这一篇博客了》 这篇博客的目标图片站&#xff0c;已经不能使用了&#xff0c;橡皮擦查阅之后&#xff0c;发现是对方网站已经不运营了&#xff0c;所以更新一下案例。…

SessionJSPCookie

今日内容 会话技术。会话技术包括两个&#xff1a; CookieSession JSP的入门学习&#xff1a;JSP也是一种服务器的动态资源&#xff0c;servlet也是一种服务器的动态资源。 会话技术 会话&#xff1a;一次会话中包含多次请求和响应。一次会话就像是人与人的一次见面聊天&…

Maya多边形物体批量材质传递工具v1.0发布及教程

一、插件介绍&#xff1a; 在大量场景制作时&#xff0c;当前期模型和材质没有同时完成&#xff0c;而用白模进行场景搭建后&#xff0c;能否后期&#xff0c;快速根据相同模型结构&#xff0c;快速识别物体并批量赋材质吗&#xff1f;答案是现在可以了。下面介绍的就是解决此…

使用SBT构建和发布基于SpringBoot的Scala应用

SBT 是 Scala 生态圈里的经典构建工具&#xff0c;虽然很多人觉得 SBT 很复杂&#xff0c;还戏称其为 SB Tool&#xff0c;但其全称确是 Simple Build Tool。 实际上&#xff0c;很多产品&#xff08;包括像 SBT 这样的工具和技术产品&#xff09;只有一个打动用户的特性就够了…

面经攻略:详谈Redis常见数据类型

&#x1f449;本篇速览 早在最开始学Redis的时候&#xff0c;我们就学到了这九种数据类型&#xff1a;String、Hash、List、Set、Zset、BitMap、HyperLogLog、GEO、Stream&#xff0c;但其实在学的时候并不了解它的底层是怎么存储这些数据&#xff0c;而不同的数据类型又有哪些…