代码随想录算法训练营第五十九天 | 647. 回文子串 516.最长回文子序列

news2024/12/24 8:40:23

1. 回文子串 

647. 回文子串 - 力扣(LeetCode)

一个子串左右两个元素相等,并且中间对称,才是回文子串

即 i=j 时,[i+1: j-1]对称

dp[i][j]: [i:j] 是否是回文字串

当 子串长度大于2 由 dp[i+1][j-1] 推出, i 由 i+1推出 所以 i 要倒序

不大于2时,则由 i j 决定

class Solution {
    public int countSubstrings(String s) {
        int length = s.length();
        boolean dp[][] = new boolean[length][length];
        // dp[i][j] [i:j] 是否是回文字串

        int res = 0;
        for(int i = length-1; i > -1; i--){
            for(int j = i; j < length; j++){
                if(s.charAt(i) == s.charAt(j)){
                    if(j-i <= 1){ // 字串长度不超过2
                        dp[i][j] = true;
                        res++;
                    }else if(dp[i+1][j-1]){
                        dp[i][j] = true;
                        res++;
                    }
                }
            }
        }
        return res;
    }
}

 

2. 最长回文子序列

516. 最长回文子序列 - 力扣(LeetCode)

子序列可以不连续 所以当 s[i] != s[j] 也需要考虑

s[i] == s[j] 时,中间的长度 + 2

s[i] != s[j] 时,要考虑左右两个哪个加入中间后更长

class Solution {
    public int longestPalindromeSubseq(String s) {
        int length = s.length();
        int[][] dp = new int[length][length];

        for(int i = length-1; i > -1; i--){
            dp[i][i] = 1; // 字串长度为 1 必然相等
            for(int j = i + 1; j < length; j++){
                if(s.charAt(i) == s.charAt(j)){
                    dp[i][j] = dp[i+1][j-1] + 2; // dp[1][2] = dp[2][1] + 2 = 0 + 2
                }else{
                    dp[i][j] = Math.max(dp[i+1][j], dp[i][j-1]);
                }
            }
        }
        return dp[0][length-1];
    }
}

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

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

相关文章

协议栈——创建套接字

前面几篇文章讲解的是应用程序使用Socket间接通知协议栈进行的连接&#xff0c;通信阶段&#xff0c;那么从现在开始讲解协议栈和网卡驱动的故事 回顾上篇文章&#xff0c;我们从第一阶段创建套接字&#xff0c;协议栈返回描述符讲起~~~ 协议栈结构 首先来看下协议栈的大致结…

【Python基础】数据容器的切片操作和集合

文章目录 前言一、切片操作1.1 什么是切片&#xff1f;1.2 如何使用切片&#xff1f; 基本切片带步长的切片省略起始和结束索引逆序切片二、集合2.1 什么是集合&#xff1f;2.2 如何定义集合&#xff1f;2.3 集合常用函数1. add()2. remove()3. discard()4. pop()5. clear() 总…

电子器件系列52:达林顿晶体管阵列

其实以前已经学到过&#xff0c;最近在网上看到有的厂家的规格书全部是中文的&#xff0c;一个叫华冠&#xff0c;还有一个叫中科芯&#xff0c;我直接贴它们家的规格书比较方便 其实都是达林顿晶体管阵列 b站上好多视频&#xff0c;搜索达林顿阵列就可以了&#xff0c;这个讲得…

[应用推荐]Web Scraper——轻量数据爬取利器

对于日常的简单网页内容爬取&#xff0c;学习Python等投入太高&#xff0c;可以考虑使用这个Chrome工具。 以下为收集的具体信息&#xff0c;按需取用。 以下内容来自web ScraperWeb Scraper - The #1 web scraping extensionThe most popular web scraping extension. Start …

[计算机入门] Windows附件程序介绍(工具类)

3.14 Windows附件程序介绍(工具类) 3.14.1 计算器 Windows系统中的计算器是一个内置的应用程序&#xff0c;提供了基本的数学计算功能。它被设计为一个方便、易于使用的工具&#xff0c;可以满足用户日常生活和工作中的基本计算需求。 以下是计算器程序的主要功能&#xff1a…

栈的概念|动态顺序栈的详细解析|静态顺序栈链式栈的代码参考

前言 今天我们将学习数据结构中的栈&#xff0c;它是一种特殊的线性表。why——在前面我们学习顺序表、链表它们都属于线性表&#xff0c;它们可以在任意位置进行插入和删除数据&#xff1b;但是今天我们学习栈&#xff0c;它只能在一端进行插入和删除。下面我们就来学习并实现…

[补题记录] Atcoder Beginner Contest 322(E)

URL&#xff1a;https://atcoder.jp/contests/abc322 目录 E Probelm/题意 Thought/思路 Code/代码 E Probelm/题意 有 N 个改进计划&#xff0c;每个计划可以执行一次&#xff1b;有 K 个参数&#xff0c;每个计划可以将所有参数提升固定值&#xff0c;即计划 i 可以为第…

[C国演义] 第十三章

第十三章 三数之和四数之和 三数之和 力扣链接 根据题目要求: 返回的数对应的下标各不相同三个数之和等于0不可包含重复的三元组 – – 即顺序是不做要求的 如: [-1 0 1] 和 [0, 1, -1] 是同一个三元组输出答案顺序不做要求 暴力解法: 排序 3个for循环 去重 — — N^3, …

leetcode 343.整数拆分、96.不同的二叉搜索树

343.整数拆分 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: n 10 输出: 36…

游戏设计模式专栏(五):三步学会原型模式

引言 大家好&#xff0c;我是亿元程序员&#xff0c;一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》&#xff0c;让糟糕的代码在潜移默化中升华&#xff0c;欢迎大家关注分享收藏订阅。 原型模式在游戏开发中是一种重要的设计模式&#xff0c;…

做外贸独立站选Shopify还是WordPress?

现在确实会有很多新人想做独立站&#xff0c;毕竟跨境电商平台内卷严重&#xff0c;平台规则限制不断升级&#xff0c;脱离平台“绑架”布局独立站&#xff0c;才能获得更多流量、订单、塑造品牌价值。然而&#xff0c;在选择建立外贸独立站的过程中&#xff0c;选择适合的建站…

Spring Bean 作用域与生命周期

1 Spring Bean 作用域 Spring 3 中为 Bean 定义了 5 中作用域&#xff0c;分别为 singleton&#xff08;单例&#xff09;、prototype&#xff08;原型&#xff09;、 request、session 和 global session&#xff0c;5 种作用域说明如下&#xff1a;singleton &#xff1a;单例…

布局与打包

属性栏直接输入值&#xff0c;比代码更直观方便。 打包&#xff1a;

五、运算表达式

5、运算表达式 1.3、运算表达式 运算表达式只能用于属性上&#xff0c;而不能在[[]]中使用 1.3.1、算术运算 thymeleaf可以使用以下算术运算符&#xff1a; , - , * , / , %&#xff1b; 示例 TestServlet中添加两个整数值 request.setAttribute("num1", 6); …

前端搭建名言生成器(内附源码)

The sand accumulates to form a pagoda ✨ 写在前面✨ JS是什么&#xff1f;✨ 名言生成器✨ 页面搭建✨ 功能实现 ✨ 写在前面 在上周我们通过HTML、CSS实现了一个简单的‘我的相册‘页面的搭建&#xff0c;很多伙伴呢跟我说难道前端就只能做一些页面搭建的工作吗&#xff1…

带头双向循环链表

目录 1 链表的种类1.1 第一对1.2 第二对1.3 第三对1.4 常用 2 带头双向循环链表的实现2.1 创建2.2 初始化2.3 打印2.4 尾插2.5 尾删2.6 头插2.7 头删2.7.1 两个变量2.7.2 三个变量 2.8 查找x所在位置2.9 在pos节点前插入x2.10 删除pos节点2.11 销毁链表 1 链表的种类 1.1 第一…

AS环境,版本问题,android开发布局知识

项目模式下有一个build.gradle,每个模块也有自己的build.gradle Android模式下有多个build.gradle&#xff0c;汇总在一起。&#xff08;都会有标注是哪个模块下的&#xff09; C:\Users\Administrator\AndroidStudioProjects 项目默认位置 Java web项目与android项目的区别…

队列(循环数组队列,用队列实现栈,用栈实现队列)

基础知识 队列(Queue):先进先出的数据结果,底层由双向链表实现 入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为对头 常用方法 boolean offer(E e) 入队 E(弹出元素的类型) poll() 出队 peek() 获取队头 int size 获取队列元素个数 boolean isEmpty(…

Spring Boot项目中热点场景详解(万字总结)

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★

循环读取图像实例

list image files (::mageDirectory,Extensions,Options:ImageFiles) par_join算子用于在调用程序中等待所有在单独的子线程中启动的程序或算子&#xff0c;方法是将par_start&#xff08;启动的线程&#xff09;添加到相应的程序行中&#xff08; by adding the par_start qu…