【LeetCode】094. 分割回文串II

news2024/11/18 1:33:58

文章目录

  • 1. 解题思路
    • 1.1 创建dp表
    • 1.2 状态转移方程
    • 1.3 提前求出所有子串是否是回文串
  • 2. 整体代码

1. 解题思路

1.1 创建dp表

这道题我们使用动态规划的方法来解,首先创建一个大小为字符串长度的dp表。dp[i] 表示 s[0, i] 的字符串最小划分多少次可以全划分为回文串。

1.2 状态转移方程

求状态转移方程,我们要考虑两种情况。s[0, i] 的字符串是回文串和不是回文串的情况。

注意,这里假设我们已经知道了哪段字符串是不是回文串,至于是如何知道的后面会说。

  • 如果s[0, i]是回文串,那么问题很简单,不用切割就行,即dp[i] = 0;
  • 如果s[0, i]不是回文串,我们要新增一个变量 j ,j 的范围为 (0, i],这里说明一些j的边界情况,j 要大于0的原因是 j 为0的情况即不用分割s[0, i]的情况(即s[0, i]为回文串的情况),j 为 i 的情况即 s[0, i-1] 中找不到从0开始且为回文串的情况。用这个 j 变量,我们遍历 j 的情况,j 是小于等于 i 的,那么 dp[j-1] 的值我们是知道的。如果从 j 到 i 的字符串是回文串,那么我们就令 dp[i] = min(dp[i], dp[j - 1] + 1); 遍历所有 j 的情况,就能求出 dp[i] 的最小值了。

在这里插入图片描述

1.3 提前求出所有子串是否是回文串

这个我在之前的博客就已经讨论过了,具体可见这篇文章。

2. 整体代码

在这里插入图片描述

class Solution {
public:
    int minCut(string s) {
        int n = s.size();
        // 求出所有子串是否为回文串
        vector<vector<bool>> isPal(n, vector<bool>(n));
        for (int i = n - 1; i >= 0; --i)
            for (int j = i; j < n; ++j)
                if (s[i] == s[j]) 
                    isPal[i][j] = i + 1 < j ? isPal[i+1][j-1] : true;
        
        // 创建dp表,由于是求最小值,可以先将所有位置初始化为最大
        vector<int> dp(n, INT_MAX);  
        for (int i = 0; i < n; ++i)
        {
            if (isPal[0][i]) dp[i] = 0;
            else
            {
                for (int j = 1; j <= i; ++j)
                    if (isPal[j][i]) dp[i] = min(dp[i], dp[j-1] + 1);
            }
        }
        return dp[n-1];
    }
};

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

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

相关文章

Linux QQ v3.1.2 2023.5.30 版本安装和体验

新电脑首次登陆需要手机扫码。 功能的确比2.x&#xff0c;1.x的时候强了很多。 官方地址&#xff1a; https://im.qq.com/linuxqq/index.shtml 如果连QQ都非常好的支持Linux了&#xff0c;那么说明使用Linux的人群真得非常多了。 ubuntu linuxqq_3.1.2-13107_amd64.deb 12…

随机RSI震荡指标公式(StochRSI),RSI和KDJ二合一

随机RSI震荡指标(StochRSI)是由图莎尔钱德和斯坦利克罗发明的一种摆动指标&#xff0c;结合了相对强弱指标&#xff08;RSI&#xff09;和随机指标&#xff08;KDJ&#xff09;的原理&#xff0c;目的是提高灵敏度&#xff0c;解决RSI难以达到超买超卖区的问题&#xff0c;以便…

Hopfield神经网络求解旅行商(TSP)问题matlab代码

1案例背景 1.1连续Hopfield神经网络概述 1.网络结构 连续Hopfield神经网络(Continuous Hopfield Neural Network,CHNN)的拓扑结构和离散Hopfield神经网络的结构类似,如图11-1所示。连续Hopfield网络和离散Hopfield 网络的不同点在于其传递函数不是阶跃函数,而是连续函…

C++ 用vector创建数组对象

C标准库提供了被封装的动态数组——vector&#xff0c;而且这种被封装的数组可以具有各种类型&#xff0c;这就使我们免去了一些重复性工作。 vector不是一类&#xff0c;而是一个类模板。 1. vector定义动态数组的形式为 vector<元素类型>数组对象名(数组长度);尖括号…

Windows下QT Creator安装MinGW 32bit编译器

前言 注&#xff1a;本作者是基于FFmpeg开发需要&#xff0c;故在Windows下QT Creator中安装MinGW 32bit编译器&#xff01;其它型号编译器参照此文章基本可以实现&#xff01; 一、下载需要的编译器 1、下载链接 链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/…

sql 关联了2张表的 update 语句(转)

转自&#xff1a;SQL Update&#xff1a;使用一个表的数据更新另一张表 、update 关联两个表 基本上 select 能支持的关联和子查询操作&#xff0c;都能在 update 语句中使用。 在 where 条件中使用子查询 update a set a.age 1 where id in (select device_id from b) 在 wher…

Django调研

1. Django 简介 基本介绍 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。 使用 Django&#xff0c;只要很少的代码&#xff0c;Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容&#xff0c;并进一步开发出全功能的 Web 服务 Django 本…

【Spring练习项目】博客系统

目录 1.项目展示2.项目结构设计3.项目功能设计4 数据库准备4.1 建表4.2 DB相关数据 5.项目模块6.添加项目公共模块6.1 common6.2 实现前端界面 7.功能实现7.1实现博客列表约定前后端交互接口实现服务器代码实现客户端代码 7.2实现博客详情约定前后端交互接口实现服务器代码实现…

电影《封神》如何应用3D人脸扫描设备进行影视制作?

在电影《封神》中伐纣大战的魔家四将的四个角色在影片中一出现&#xff0c;便吸引了观众的所有目光&#xff0c;这逼真的魔家四将的制作前期是从寺庙、文献中收集了四大天王众多的造型和画像&#xff0c;并且还会依据演员的面貌、面部特征适当地优化。 因此在制作中还需要通过扫…

WAF绕过-AWVS+Xray+Goby+sqlmap-绕过宝塔防火墙

WAF绕过主要集中在信息收集&#xff0c;漏洞发现&#xff0c;漏洞利用&#xff0c;权限控制四个阶段。 1、什么是WAF&#xff1f; Web Application Firewall&#xff08;web应用防火墙&#xff09;&#xff0c;一种公认的说法是“web应用防火墙通过执行一系列针对HTTP/HTTPS的安…

【1++的C++进阶】之多态

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的C进阶】 文章目录 一&#xff0c;什么是多态&#xff1f;二&#xff0c;剖析多态的调用原理三&#xff0c;抽象类四&#xff0c;多继承中的虚函数表 一&#xff0c;什么是多态&#xff1f; …

【LeetCode 75】第十九题(724)寻找数组的中心下标

目录 题目: 示例: ​分析: 代码运行结果: 题目: 示例: 分析: 给一个数组,让我们找出一个下标,在这个下标左边的元素总和等于这个下标右边的元素总和. 我们可以把整个数组的总和求出来,然后再从左往右遍历一次数组,遍历的同时将遍历过的数累加记录到一个变量中.若遍历到一…

【C语言进阶】数据的存储----整型篇

​ &#x1f341; 博客主页:江池俊的博客 &#x1f4ab;收录专栏&#xff1a;C语言——探索高效编程的基石 &#x1f4bb; 其他专栏&#xff1a;数据结构探索 ​&#x1f4a1;代码仓库&#xff1a;江池俊的代码仓库 &#x1f3aa; 社区&#xff1a;GeekHub &#x1f341; 如果觉…

数据库索引失效的情况

1.对添加了索引的字段进行函数运算 2.如果是字符串类型的字段&#xff0c;如果不加单引号也会导致索引失效 3.如果最索引字段使用模糊查询&#xff0c;如果是头部模糊索引将失效&#xff0c;如果是尾部模糊索引则正常 4.如果使用or分割符&#xff0c;如果or前面的条件中的列有…

JUC并发编程(二)ForkJoinPool、Future、CompletableFuture、CAS

文章目录 ForkJoin分治工作窃取ForkJoinPool与ThreadPoolExecutor使用案例不带返回值的计算--RecursiveAction带返回值的计算--RecursiveTask Future 异步回调烧水案例join实现FutureTask实现 CompletableFuture为什么叫CompletableFuture?创建异步任务supplyAsyncrunAsync获取…

Vue插槽 、自定义指令、render函数、过滤器和插件

目录 插槽 自定义指令 directive 全局注册 局部注册 钩子函数 render渲染函数 过滤器 插件 plugin 插槽 普通插槽&#xff0c;具名插槽&#xff0c;作用域插槽 插槽允许我们在调用子组件的时候为子组件传递模板。 <slot> 元素作为承载分发内容的出口。 一个不带…

双链表(带哨兵位头节点)

目录 ​编辑 双链表的初始化&#xff1a; 双链表的打印&#xff1a; 双链表的尾插&#xff1a; 双链表的头插&#xff1a; 双链表的尾删&#xff1a; 双链表的头删&#xff1a; 双链表pos位置之前的插入&#xff1a; 双链表pos位置的删除&#xff1a; 关于顺序表和链表…

MyBatis-Plus实现分页查询

目录 MyBatis-Plus实现分页查询 代码 定义一个MyBatis-Plus拦截器 在连接数据库的配置文件中添加MyBatis-Plus日志查看MyBatis-Plus的SQL语句 测试 运行结果 MyBatis-Plus实现分页查询 代码 定义一个MyBatis-Plus拦截器 package com.dong.config;import com.baomidou.my…

windows下mysql的下载与安装

文章目录 1 下载2 安装目录下新建data文件夹和my.ini3 安装4设置密码与远程连接5 配置环境变量6 navicate连接成功 1 下载 官网地址 https://www.mysql.com/点击下载 社区下载 社区服务 选择版本下载 2 安装目录下新建data文件夹和my.ini my.ini 内容如下 [mysql] # 设置my…

iphone内存不足导致白苹果?可以使用这2种办法解决!

因为iPhone内存不足没及时清理导致打开任何软件闪退&#xff0c;这时很多小伙伴会重启手机来解决闪退问题&#xff0c;但就会出现白苹果问题&#xff0c;无法正常进入手机系统、实现任何操作的一种状态。 内存不足导致iPhone白苹果的问题很常见&#xff0c;可以说是苹果最常见…