LeetCode 1745.分割回文串 IV:动态规划(用III或II能直接秒)

【LetMeFly】1745.分割回文串 IV:动态规划(用III或II能直接秒)

力扣题目链接:https://leetcode.cn/problems/palindrome-partitioning-iv/

给你一个字符串 s ,如果可以将它分割成三个 非空 回文子字符串,那么返回 true ,否则返回 false 。

当一个字符串正着读和反着读是一模一样的,就称其为 回文字符串

 

示例 1:

输入:s = "abcbdd"
输出:true
解释:"abcbdd" = "a" + "bcb" + "dd",三个子字符串都是回文的。

示例 2:

输入:s = "bcbddxy"
输出:false
解释:s 没办法被分割成 3 个回文子字符串。

 

提示:

  • 3 <= s.length <= 2000
  • s​​​​​​ 只包含小写英文字母。

解题方法:动态规划

如果想用之前的方法直接AC:

  • 1278.分割回文串 III:令k = 3,复杂度 O ( n 2 k ) O(n^2k) O(n2k)
  • 132.分割回文串 II:也就是今天的方法。

132.分割回文串 II中我们通过预处理可以在 O ( n 2 ) O(n^2) O(n2)时间复杂度内得到字符串s的任一字串是否为回文串(方法简述如下:)

使用isok[i][j]表示字符串s从下标i到下标j的子串是否为回文串。若 i ≥ j i\geq j ij则视为回文串,否则有状态转移方程 i s o k [ i ] [ j ] = s [ i ] = = s [ j ] AND  i s o k [ i + 1 ] [ j − 1 ] isok[i][j] = s[i] == s[j]\text{ AND } isok[i + 1][j - 1] isok[i][j]=s[i]==s[j] AND isok[i+1][j1]

都知道任意一个字串是否是回文串了,我直接枚举两个分割位置,每次使用 O ( 1 ) O(1) O(1)时间看看被分成的三段是否都为回文字符串不就可以了么?

  • 时间复杂度 O ( n 2 ) O(n^2) O(n2),其中 n = l e n ( s ) n=len(s) n=len(s)
  • 空间复杂度 O ( n 2 ) O(n^2) O(n2)

AC代码

C++
/** @Author: LetMeFly* @Date: 2025-03-04 10:18:19* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-03-04 10:28:38*/
class Solution {
public:bool checkPartitioning(string s) {int n = s.size();vector<vector<bool>> isok(n, vector<bool>(n, true));for (int i = n - 1; i >= 0; i--) {for (int j = i + 1; j < n; j++) {isok[i][j] = s[i] == s[j] && isok[i + 1][j - 1];}}for (int i = 0; i < n; i++) {for (int j = i + 1; j < n - 1; j++) {if (isok[0][i] && isok[i + 1][j] && isok[j + 1][n - 1]) {return true;}}}return false;}
};
Python
'''
Author: LetMeFly
Date: 2025-03-04 10:30:23
LastEditors: LetMeFly.xyz
LastEditTime: 2025-03-04 10:33:30
'''
class Solution:def checkPartitioning(self, s: str) -> bool:n = len(s)isok = [[True] * n for _ in range(n)]for i in range(n - 1, -1, -1):for j in range(i + 1, n):isok[i][j] = s[i] == s[j] and isok[i + 1][j - 1]for i in range(n):for j in range(i + 1, n - 1):if isok[0][i] and isok[i + 1][j] and isok[j + 1][n - 1]:return Truereturn False
Go
/** @Author: LetMeFly* @Date: 2025-03-04 10:42:05* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-03-04 10:46:32*/
package mainfunc checkPartitioning(s string) bool {n := len(s)isok := make([][]bool, n)for i, _ := range isok {isok[i] = make([]bool, n)for j, _ := range isok[i] {isok[i][j] = true}}for i := n - 1; i >= 0; i-- {for j := i + 1; j < n; j++ {isok[i][j] = s[i] == s[j] && isok[i + 1][j - 1]}}for i := 0; i < n; i++ {for j := i + 1; j < n - 1; j++ {if isok[0][i] && isok[i + 1][j] && isok[j + 1][n - 1] {return true}}}return false
}
Java
/** @Author: LetMeFly* @Date: 2025-03-04 10:47:02* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-03-04 10:49:14*/
class Solution {public boolean checkPartitioning(String s) {int n = s.length();boolean[][] isok = new boolean[n][n];for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {isok[i][j] = true;}}for (int i = n - 1; i >= 0; i--) {for (int j = i + 1; j < n; j++) {isok[i][j] = s.charAt(i) == s.charAt(j) && isok[i + 1][j - 1];}}for (int i = 0; i < n; i++) {for (int j = i + 1; j < n - 1; j++) {if (isok[0][i] && isok[i + 1][j] && isok[j + 1][n - 1]) {return true;}}}return false;}
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

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

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

相关文章

25年3月5日

1.思维导图 2.不太会 #include "head.h" int main(int argc, const char *argv[]) {int fdopen("../xiaoxin.bmp","O_RDONLY");if(fd-1)printf("open error");//大小struct stat st;if(stat("…

全球首创!微软发布医疗AI助手,终结手写病历时代

今天凌晨&#xff0c;微软发布了医疗界首个用于临床工作流程的AI助手Microsoft Dragon Copilot。 Dragon Copilot是基于语音文本的混合架构&#xff0c;能够将医生的语音或临床口述内容实时转换为文本。例如&#xff0c;医生可以通过语音输入患者的病历信息、医嘱或诊断结果&a…

[自动驾驶-传感器融合] 多激光雷达的外参标定

文章目录 引言外参标定原理ICP匹配示例参考文献 引言 多激光雷达系统通常用于自动驾驶或机器人&#xff0c;每个雷达的位置和姿态不同&#xff0c;需要将它们的数据统一到同一个坐标系下。多激光雷达外参标定的核心目标是通过计算不同雷达坐标系之间的刚性变换关系&#xff08…

Blazor-路由模板(下)

路由约束 类型约束 我们这里使用{id:int}限制路由&#xff0c;id为int类型&#xff0c;并且路由参数 id 对应的 Id 属性也必须是 int 类型。我们试试能否正常访问 page "/demoPage/{id:int}" <h3>demoPage</h3> <h2>路由参数Id&#xff1a;Id&l…

多线程-JUC源码

简介 JUC的核心是AQS&#xff0c;大部分锁都是基于AQS扩展出来的&#xff0c;这里先结合可重入锁和AQS&#xff0c;做一个讲解&#xff0c;其它的锁的实现方式也几乎类似 ReentrantLock和AQS AQS的基本结构 AQS&#xff0c;AbstractQueuedSynchronizer&#xff0c;抽象队列…

通过多线程获取RV1126的AAC码流

目录 一RV1126多线程获取音频编码AAC码流的流程 1.1AI模块的初始化并使能 1.2AENC模块的初始化 ​​​​​​​1.3绑定AI模块和AENC模块 ​​​​​​​1.4多线程获取每一帧AAC码流 ​​​​​​​1.5每个AAC码流添加ADTSHeader头部 ​​​​​​​1.6写入具体每一帧AAC的…

JVM常用概念之对象初始化的成本

在JVM常用概念之新对象实例化博客中我讲到了对象的实例化&#xff0c;主要包含分配&#xff08;TLAB&#xff09;、系统初始化、用户初始化&#xff0c;而我在JVM常用概念之线程本地分配缓冲区&#xff08;ThreadLocal Allocation Buffer&#xff0c;TLAB&#xff09;博客中也讲…

java后端开发day27--常用API(二)正则表达式爬虫

&#xff08;以下内容全部来自上述课程&#xff09; 1.正则表达式&#xff08;regex&#xff09; 可以校验字符串是否满足一定的规则&#xff0c;并用来校验数据格式的合法性。 1.作用 校验字符串是否满足规则在一段文本中查找满足要求的内容 2.内容定义 ps&#xff1a;一…

AI---DevOps常备工具(‌AI-Integrated DevOps Essential Tools)

AI---DevOps常备工具 技术领域正在迅速发展&#xff0c;随着我们步入 2025 年&#xff0c;有一点是明确的&#xff1a;人工智能&#xff08;AI&#xff09;不再只是一个流行词&#xff0c;它是每个 DevOps 工程师都需要掌握的工具。随着云环境的复杂性增加、对更快部署的需求以…

Pytorch中的主要函数

目录 一、torch.manual_seed(seed)二、torch.cuda.manual_seed(seed)三、torch.rand(*size, outNone, dtypeNone, layouttorch.strided, deviceNone, requires_gradFalse)四、给大家写一个常用的自动选择电脑cuda 或者cpu 的小技巧五、torch.version.cuda&#xff1b;torch.bac…

Spring Boot中对接Twilio以实现发送验证码和验证短信码

Twilio介绍 Twilio是一家提供云通信服务的公司&#xff0c;旨在帮助开发者和企业通过简单的API实现各种通信功能。以下是Twilio的一些主要特点和服务介绍&#xff1a; 核心功能 短信服务&#xff08;SMS&#xff09;&#xff1a;允许用户通过API发送和接收短信&#xff0c;支…

VSCode详细安装步骤,适用于 Windows/macOS/Linux 系统

以下是 Visual Studio Code (VSCode) 的详细安装步骤&#xff0c;适用于 Windows/macOS/Linux 系统&#xff1a; VSCode 的详细安装步骤 一、Windows 系统安装1. 下载安装包2. 运行安装程序3. 验证安装 二、macOS 系统安装1. 方法一&#xff1a;官网下载安装包2. 方法二&#x…

基于PyTorch的深度学习3——基于autograd的反向传播

反向传播&#xff0c;可以理解为函数关系的反向传播。

设备管理系统功能与.NET+VUE(IVIEW)技术实现

在现代工业和商业环境中&#xff0c;设备管理系统&#xff08;Equipment Management System&#xff0c;简称EMS&#xff09;是确保设备高效运行和维护的关键工具。本文采用多租户设计的设备管理系统&#xff0c;基于.NET后端和VUE前端&#xff08;使用IVIEW UI框架&#xff09…

PHP之特性

在你有别的编程语言的基础下&#xff0c;你想学习PHP&#xff0c;可能要了解的PHP特有的东西。 定界符 使用<<<TT(可以是任意字符&#xff0c;但是不可以在别的地方使用过)和TT&#xff0c;会解析html格式和变量&#xff0c;如果在<<<后面加上单引号就会不…

9-Agent大模型中工作流的使用方法分析

目录 关键词 摘要 速览 配置插件进行新闻内容查找的工作流设置 自动化调用用户输入变量的插件配置教程 配置大模型以整理并简要输出新闻内容 新闻内容总结功能调试与优化 搭建与发布工作流优化布局的流程详解 创建和配置智能体工作流程 调试页面与工作流配置演示 思…

记一次:泛微OA集成Mybatis后 insert/update执行成功,但未真正插入或修改数据

背景&#xff1a;通过Mybatis插入数据或更新数据&#xff0c;显示插入/更新成功&#xff0c;查询数据库&#xff0c;发现并未插入成功、数据也没更新成功。下面是Mapper文件 public interface TestOrmMapper {int insertByTest(Param("requestId") Integer requestI…

使用 Spring Boot 实现前后端分离的海康威视 SDK 视频监控

使用 Spring Boot 实现前后端分离的海康威视 SDK 视频监控系统&#xff0c;可以分为以下几个步骤&#xff1a; 1. 系统架构设计 前端&#xff1a;使用 Vue.js、React 或 Angular 等前端框架实现用户界面。后端&#xff1a;使用 Spring Boot 提供 RESTful API&#xff0c;负责与…

【大模型系列篇】国产开源大模型DeepSeek-V3技术报告解析

DeepSeek-V3技术报告 目录 DeepSeek-V3技术报告 1. 摘要 2. 引言 3. DeepSeek V3 架构 3.1 基础架构 3.1.1. 多头潜在注意力 3.1.2. DeepSeekMoE和无辅助损失的负载均衡 3.2 多令牌预测 4. 基础设施 4.1 计算集群 4.2 训练框架 4.2.1. DualPipe算法与计算通信协同优…

负载均衡 - 一致性hash算法

构建场景 假如我们有三台缓存服务器编号node0、node1、node2&#xff0c;现在有3000万个key&#xff0c;希望可以将这些个key均匀的缓存到三台机器上&#xff0c;你会想到什么方案呢&#xff1f; 我们可能首先想到的方案&#xff0c;是取模算法hash&#xff08;key&#xff0…