LeetCode题解 15 (5,96) 最长回文子串,不同的二叉搜索树

news2025/1/22 19:50:08

文章目录

    • 最长回文子串
      • 代码解答:
    • 不同的二叉搜索树
      • 代码解答:

最长回文子串

在这里插入图片描述
首先我们应该先了解什么是回文子串:

单个字符 例如 a 这也是回文字符串

2个字符 aa 或者 bb 这也是回文字符串

3个字符 aba 或者 bab

多个字符 abba ababa 这些也被叫做回文子串

从前到后和从后到前念的顺序一样的被叫做回文字符串
再回到题目,这道题我们采用动态规划来解决:
我们需要先定义1个容器dp(dp 为二维数组)

//其中len为题目给的字符串s的长度
    boolean[][] dp = new boolean[len][len];

我们定义1个i和j,i和j表示的是从i到j的所组成的数组
因为我们之前谈过单个字符也是回文子串,因此当i和j相等时表示的就是单个字符 例如: ad dp[0][0]表示的就是 a,因此我们将dp[i][i] 全部设置为true

         boolean[][] dp = new boolean[len][len];
         for(int i = 0;i<len;i++){
             dp[i][i] = true;
         }

对应的容器:
在这里插入图片描述
在这个容器中我们只需要看左下脚,因为我们定义的是从i到j,i必须要小于j
之后我们就需要将左下角的填满

        char[] c = s.toCharArray();
        for(int j = 1;j<len;j++){
            for(int i = 0;i<len-1&&i<j;i++){
                if(c[i] != c[j]){
                    dp[i][j] = false;
                }else{
                    if(j-i+1 < 3){
                        dp[i][j] = true;
                    }else{
                        dp[i][j] = dp[i+1][j-1];
                    }
                }

从容器中可以看出我们i是从0到3即0到 len - 1,j是从1到4即 1到 len,
如果dp[i] 和 dp[j] 不一样那肯定是不符合题意的,如 abc , a 和 c不相等,直接置为false;
如果相等我们又要考虑 aa 这种情况,如果两边的都相等了,长度还是小于3就没必要再往里走了。就可以直接置为true, 如果长度大于3我们就往里走,即dp方程 dp[i][j] = dp[i+1][j-1]; 这个dp方程的意思就是i往左走,j往右走,即
在这里插入图片描述
之后我们只需要拿到最大的长度max,通过切割就可以得到

            if(dp[i][j] && j-i+1 > max){
                    max = j-i+1;
                    start = i;
                }
            }
        }
        return s.substring(start,start+max);

代码解答:

class Solution {
    public String longestPalindrome(String s) {
          int len = s.length();
          if(len == 1){
              return s;
          }
          //定义容器
         boolean[][] dp = new boolean[len][len];
         for(int i = 0;i<len;i++){
             dp[i][i] = true;
         }
         int start = 0;
         int max = 1;
         char[] c = s.toCharArray();
        for(int j = 1;j<len;j++){
            for(int i = 0;i<len-1&&i<j;i++){
                if(c[i] != c[j]){
                    dp[i][j] = false;
                }else{
                    if(j-i+1 < 3){
                        dp[i][j] = true;
                    }else{
                        dp[i][j] = dp[i+1][j-1];
                    }
                }
                if(dp[i][j] && j-i+1 > max){
                    max = j-i+1;
                    start = i;
                }
            }
        }
        return s.substring(start,start+max);
    }
}

不同的二叉搜索树

在这里插入图片描述
这道题也是动态规划,我们需要先定义容器

        int[] dp = new int[n+1];

这道题要找到dp方程我们就需要将每个数都当作一次根节点,将它们能二叉搜索树相加就可以,我们这里画出一个区间更好理解:
在这里插入图片描述
我们在i个元素中选择1个j当作根节点 那么比j小的 j-1个数就可以组成j的左子树,比j大的就可以组成j的右子树。 它们总共能组成的二叉搜索树也就是相乘的关系。

 for(int i = 1;i<=n;i++){
            //让n个节点都当一次头节点
            for(int j = 1;j<=i;j++){
                dp[i] += dp[j-1] * dp[i-j];
            }
        }

代码解答:

class Solution {
    public int numTrees(int n) {
       //动态规划
        int[] dp = new int[n+1];
        dp[0] = 1;
        for(int i = 1;i<=n;i++){
            //让n个节点都当一次头节点
            for(int j = 1;j<=i;j++){
                dp[i] += dp[j-1] * dp[i-j];
            }
        }
        return dp[n];
    }
}

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

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

相关文章

【源码透视】SpringBoot的SPI机制

一、从java类加载机制说起 java中的类加载器负载加载来自文件系统、网络或者其他来源的类文件。jvm的类加载器默认使用的是双亲委派模式。三种默认的类加载器Bootstrap ClassLoader、Extension ClassLoader和System ClassLoader&#xff08;Application ClassLoader&#xff09…

开源项目 Spartacus 的 git 提交流程规范

Spartacus 开源项目由一组库组成。为了更容易知道哪个版本的库与另一个版本兼容&#xff0c;库版本在所有包中同步。 这意味着当我们要发布 1.5.0 版本时&#xff0c;我们会发布该版本下的所有库&#xff0c;即使某些库与上一个版本相比没有任何变化。 这样一来&#xff0c;我们…

NKOJ P5676 SuperGCD【超级GCD】

为什么NKOJ的题交JAVA会被keyword卡System&#xff0c;还不能用python水高精度…… 题目分析 回归正题&#xff0c;由于本题数据范围0≤A,B≤10100000 \le A,B \le 10^{10000}0≤A,B≤1010000两个100001000010000位的整数算GCD,所以用高精度欧几里得GCD的话会使得算法时间复杂…

数据治理工程师必备证书DAMA-CDGA/CDGP,含金量高

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

Nacos的Java SDK

配置管理 在界面上添加配置 我们在界面上新建了一个json类型的配置 使用SDK来获取配置 public String getConfig(String dataId, String group, long timeoutMs) throws NacosException名称类型描述dataIdstring配置 ID&#xff0c;采用类似 package.class&#xff08;如com…

10分钟vue初步入门

基础原理 使用vue开发&#xff0c;对于新手需要了解的两个关键点是 MVVM MVC模式变化而来&#xff0c;相对于MVC强调控制-模型-视图的责任分离之外&#xff0c;最大的特点就是引入ViewModel&#xff0c;支持双向绑定 比如你改变一个输入框 Input 标签的值&#xff0c;会自动…

仓库管理系统GreaterWMS的安装

本文是应网友 ubuntu 和 Nathan 要求写的&#xff1b;因为看起来 Nathan 比较着急&#xff0c;就突击了一下&#xff0c;因为时间仓促&#xff0c;错误在所难免&#xff0c;敬请谅解~ 什么是 GreaterWMS &#xff1f; GreaterWMS是完全开源的仓库管理系统。该库存管理系统是目前…

心脏病_冠心病智能预测模型(人工智能,机器学习,用于论文作业_专利_企业建模__项目申报_科研报告,收藏)

作者Toby&#xff0c;来自心脏病_冠心病智能预测模型 ​ 心脏病&#xff08;heart disease&#xff09;是心脏疾病的总称&#xff0c;包括风湿性心脏病、先天性心脏病、高血压性心脏病、冠心病、心肌炎等各种心脏病。 人体“发动机” 心脏是一个强壮的、不知疲倦、努力工作的…

更适合运动的耳机,设计时尚轻巧好用,南卡Runner CC3上手

很多喜欢健身的朋友&#xff0c;在锻炼的时候都会戴上一副耳机&#xff0c;这样可以在音乐的节奏中享受运动的乐趣。在运动耳机当中&#xff0c;骨传导耳机是这两年很受欢迎的一种类型&#xff0c;相比于更常见的真无线耳机&#xff0c;骨传导耳机因为特殊的发声方式&#xff0…

品优购项目-头部底端和整个页面底端制作

品优购项目(二) 3). nav 制作 nav 盒子通栏有高度 而且有个下边框1号盒子 左侧浮动 dorpdown 下拉导航 里面包含 dt dd2号盒子右侧浮动 navitems 导航栏组 11. logo 优化 logo 里面 首先放一个 h1 标签 &#xff0c;目的是为了提权&#xff0c;告诉搜索引擎&#xff0c;这个地方…

微信小程序开发—入门到跑路(四)

1、学习目标 今天所学习的所有知识点都是围绕自定义组件 &#xff0c; 具体参见&#xff1a;【指南>自定义组件】 知识点名称知识点内容难度系数要求程度组件创建和引用创建自定义组件、局部引用、全局引用、全局和局部比较、组件和页面的区别3星掌握组件样式样式的隔离特…

如何使用Moonbeam Safe质押GLMR/MOVR

通过Moonbeam Safe能够轻松实现与已验证的合约进行合约交互。Moonbeam的StakingInterface.sol&#xff08;虽然准确来说被描述为预编译而非合约&#xff09;已经在Moonscan上通过验证&#xff0c;能够使用Moonbeam Safe&#xff08;Gnosis的一个用户友好型分叉&#xff09;实现…

使用 vcpkg 安装 mathgl,但使用 find_package 命令却找不到的问题

问题描述 使用 vscode cmake vcpkg 进行c开发, 很 Nice. 但是在使用MathGL库的时候却出现了问题, 如果你的CMakeLists.txt 是这样写的: cmake_minimum_required(VERSION 3.0.0) project(mgl_demo VERSION 0.1.0)find_package(MathGL CONFIG REQUIRED)add_executable(mgl_de…

贝叶斯基础

概要 贝叶斯定理描述的是条件概率&#xff0c;不同于全局概率&#xff0c;它表示当某一个事件&#xff08;B&#xff09;发生时&#xff0c;另一个事件&#xff08;A&#xff09;发生的概率。从机器学习的角度&#xff0c;从全局无法知道事件&#xff08;A&#xff09;发生的概…

IT行业岗位分析系统设计与实现(Spark+Hadoop)

目 录 摘要 I ABSTRACT II 1 引言 1 1.1 研究背景 1 1.2 研究意义 1 1.3 研究内容与组织结构 1 2 相关理论与技术介绍 3 2.1 HDFS简介 3 2.2 Spark简介 4 2.3 MongoDB数据库简介 6 2.4 爬虫技术简介 7 2.5 Echarts简介 8 2.6 Pyqt5简介 8 2.7 本章小结 8 3 系统需求分析 9 3.1…

BertNet、RoBertaNe

又带来了可扩展、可解释&#xff0c;从预训练语言模型中高效提取知识图谱的新框架 来自加州大学圣迭戈分校&#xff08;UCSD&#xff09;、卡内基梅隆大学&#xff08;CMU&#xff09;等机构的研究者提出了一种自动知识抽取框架&#xff0c;可以从 BERT 或 RoBerta 等预训练语…

fpga实操训练(利用fpga实现pwm)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 pwm&#xff0c;其实就是方波。它的本质就是通过方波中占空比的调节&#xff0c;实现对外部设备的控制。简单如台灯&#xff0c;复杂如电机都是这么…

【Java系列】小小练习——带你回顾Java基础语法

返回主篇章         &#x1f447; 【Java】才疏学浅小石Java问道之路 Java小练习1. 练习一1.1 题目1.2 题解(附解析)2. 练习二2.1 题目2.2 题解(附解析)3. 练习三3.1 题目3.2 题解(附解析)小结1. 练习一 1.1 题目 定义三个变量&#xff0c;分别为人物性别、年龄、身高…

Python-实战:基于白鲸优化BWO算法的VMD超参数优化

目录 1、白鲸优化算法 2、BWO优化VMD参数 3、实战 3.1 原始时间序列数据 3.2 VMD分解--直接设置参数 3.3 采用BWO优化VMD 4、代码 在博客的基础上&#xff0c;本文利用白鲸优化算法对VMD的参数进行优化&#xff0c;采用python实现。 1、白鲸优化算法 白鲸优化算法([Beluga…

【Python】自动备份脚本

文章目录一、前言二、代码一、前言 之前因为疫情常常不知道会不会被封在家里&#xff0c;又不想把电脑带过来带过去&#xff0c;就做了这个自动备份的脚本。 功能如下&#xff1a; 自动从指定根目录里将找到的所有指定后缀名的文件备份到一个备份文件夹里&#xff1b;将备份…