代码随想录刷题day50|(回溯算法篇)131.分割回文串▲

目录

一、回溯算法基础知识

二、分割回文串思路

2.1 如何切割

2.2 判断回文

2.3 回溯三部曲 

2.4 其他问题

三、相关算法题目

四、总结


一、回溯算法基础知识

详见:代码随想录刷题day46|(回溯算法篇)77.组合-CSDN博客

二、分割回文串思路

回溯递归法

两个问题:1.如何切割?2.判断回文?

2.1 如何切割

切割问题可以抽象成组合问题:取自代码随想录

如何模拟切割线

切割线通过startIndex和 i 来模拟,表示当前处理的子串范围;

2.2 判断回文

利用双指针法,一个从前往后遍历字符串s,另一个从后往前遍历字符串s,当两者不等时,不是回文,返回false;否则返回true;

2.3 回溯三部曲 

①函数参数和返回值:返回为空void,参数传入字符串s,以及每次递归遍历时的起始位置startIndex;

②终止条件:递归的深度,树的深度,何时结束递归:当切割到字符串的最后位置(s.length的位置)时,说明本次递归结束,将本次结果加入result结果集中,然后返回;

③单层递归逻辑:for循环中,startIndex 表示每次递归中开始遍历的起始位置,i 从startIndex开始,逐渐+1,那么[startIndex, i] 就是要截取的子串;得到子串以后,首先判断是否为回文,如果是,加入单个结果集 list 中,然后回退;如果不是,跳过本次循环,i++;

注意切割过的位置不能重复切割,所以递归中startIndex参数要传入 i+1;

2.4 其他问题

递归循环中如何截取子串?

通过String的substring方法👇

public String substring(int beginIndex, int endIndex)

返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex

参数:beginIndex - 起始索引(包括);endIndex - 结束索引(不包括)。

示例:

"hamburger".substring(4, 8)   returns "urge"

"smiles".substring(1, 5)          returns "mile"

三、相关算法题目

131.分割回文串

class Solution {List<String> list = new ArrayList<>();//存放单个结果List<List<String>> result = new ArrayList<>();//存放结果集合public List<List<String>> partition(String s) {backtracking(s,0);return result;}private void backtracking(String s, int startIndex){//如果起始索引已经超过子串长度 说明分割完毕 得到结果if(startIndex >= s.length()){result.add(new ArrayList<>(list));return;}//单层递归逻辑for(int i = startIndex;i < s.length();i++){//提取从startIndex 到 i 的子串String substring = s.substring(startIndex, i + 1);//判断是否为回文if(isPalindrome(substring)){//是回文list.add(substring);backtracking(s, i+1);//递归处理剩余部分list.removeLast();//回溯 移除当前子串}}}//判断一个字符串是否是回文private boolean isPalindrome(String s){int left = 0;int right = s.length() - 1;while(left < right){if(s.charAt(left) != s.charAt(right)){return false;}left++;right--;}return true;}
}

四、总结

1.本题难点:理解分割回文串 类似 组合问题,也可以抽象成树的结构,深度代表递归的深度,宽度代表for循环;

2.切割的方式,也就是具体的树结构是什么样的?每一个节点;

3.终止条件,最后的叶子节点;

4.单层递归逻辑,每次截取的子串是哪里到哪里?

5.如何判断一个字符串是否为回文;

6.如何截取子串;

7.这真的是中等题目吗,自己想从一开始分割方式抽象成树结构就错咯😶

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

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

相关文章

VS Code PowerShell、Windows PowerShell、CMD 的区别与联系

VS Code PowerShell、Windows PowerShell、CMD 的区别与联系? VS Code PowerShell、Windows PowerShell、CMD 的区别与联系&#xff1a; 一、核心概念对比 名称 全称 类型 定位 VS Code PowerShell Visual Studio Code PowerShell 代码编辑器集成终端 开发/脚本编写…

关于Unity的CanvasRenderer报错

MissingReferenceException: The object of type ‘CanvasRenderer’ has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object. UnityEngine.UI.GraphicRaycaster.Raycast (UnityEng…

C++编译流程

编译器其实就是一个翻译器&#xff0c;把我们的文件内容翻译成机器能够看懂的指令&#xff0c;但如何合理翻译是核心。 C语言编译 需要经过以下几步&#xff1a; 词法分析&#xff1a;扫描代码&#xff0c;确定单词类型&#xff0c;比如是变量还是函数&#xff0c;是标识符还…

python学智能算法(八)|决策树

【1】引言 前序学习进程中&#xff0c;已经对KNN邻近算法有了探索&#xff0c;相关文章链接为&#xff1a; python学智能算法&#xff08;七&#xff09;|KNN邻近算法-CSDN博客 但KNN邻近算法有一个特点是&#xff1a;它在分类的时候&#xff0c;不能知晓每个类别内事物的具…

使用 OpenCV 拼接进行图像处理对比:以形态学操作为例

图像处理在计算机视觉中起着至关重要的作用&#xff0c;而 OpenCV 作为一个强大的图像处理库&#xff0c;提供了丰富的函数来实现各类图像处理任务。形态学操作&#xff08;Morphological Operations&#xff09;是其中常用的技术&#xff0c;尤其适用于二值图像的处理。常见的…

版本控制器Git ,Gitee如何连接Linux Gitee和Github区别

&#x1f4d6; 示例场景 假设你和朋友在开发一个「在线笔记网站」&#xff0c;代码需要频繁修改和协作&#xff1a; 只用本地文件管理 每次修改后手动复制文件&#xff0c;命名为 v1.html、v2.html 问题&#xff1a;无法追踪具体改动内容&#xff1b;多人修改易冲突&#xff1…

使用DeepSeek翻译英文科技论文,以MarkDown格式输出,使用Writage 3.3.1插件转换为Word文件

一、使用DeepSeek翻译英文科技论文&#xff0c;以MarkDown格式输出 以科技论文“Electrical Power System Sizing within the Numerical Propulsion System Simulation”为例。 关于Writage 3.3.1的进一步了解&#xff0c;可发送邮件至邮箱pyengine163.com. 首先&#xff0c;打…

【NPU 系列专栏 3.0 -- scale-out 和 scale-in 和 scale-up 和 scale-down

文章目录 Overview1. Scale-out 和 Scale-in (横向扩展/缩减)举例:AI SoC 中的 Scale-out 和 Scale-in2. Scale-up 和 Scale-down (纵向扩展/缩减)举例:AI SoC 中的 Scale-up 和 Scale-down对比总结Overview 本文会 以 AI SoC 为例 详细介绍什么是 scale-out 和 scale-i…

Spring Boot 集成 Quartz 实现定时任务(Cron 表达式示例)

Spring Boot 集成 Quartz 实现定时任务&#xff08;Cron 表达式示例&#xff09; 前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Spring Boot 观察定时任务执行5. Quartz Cron 表达式详解6. 结论 前言 在 Spring Boot 项目中&#xff0c;我们经常…

智能汽车图像及视频处理方案,支持视频智能拍摄能力

美摄科技&#xff0c;作为智能汽车图像及视频处理领域的先行者&#xff0c;凭借其卓越的技术实力和前瞻性的设计理念&#xff0c;为全球智能汽车制造商带来了一场视觉盛宴的革新。我们自豪地推出——美摄科技智能汽车图像及视频处理方案&#xff0c;一个集高效性、智能化、画质…

QPrintDialog弹出慢的问题

开发环境 操作系统: openkylin2qt版本 : 5.15.10排查过程 首先看下问题的现象, 问题现象 复现问题的demo很简单,只能是从跟踪qt代码方面入手 void MainWindow::on_pushButton_clicked(){QPrinter printer;QPrintDialog dialog(&printer,this);dialog.exec();} 现在需要找一…

VLAN:逻辑隔离冲突网络的详细讲解

1. VLAN的基本概念 VLAN&#xff08;Virtual Local Area Network&#xff0c;虚拟局域网&#xff09; 是一种将物理网络划分为多个逻辑独立网络的技术。通过VLAN&#xff0c;不同逻辑网络可以在同一物理网络基础设施上运行&#xff0c;彼此隔离&#xff0c;互不影响。 核心功能…

投影算子(Projection Operator)的定义、性质、分类以及应用

文章目录 1. 投影算子的定义2. 投影算子的几何意义3. 一些简单的例子例 1&#xff1a;二维平面上的投影例 2&#xff1a;投影到一条任意方向的直线例 3&#xff1a;三维空间中投影到一个平面 4. 投影算子的性质4.1、幂等性&#xff08;Idempotency&#xff09;&#xff1a; P 2…

java使用Apache POI 操作word文档

项目背景&#xff1a; 当我们对一些word文档&#xff08;该文档包含很多的标题比如 1.1 &#xff0c;1.2 &#xff0c; 1.2.1.1&#xff0c; 1.2.2.3&#xff09;当我们删除其中一项或者几项时&#xff0c;需要手动的对后续的进行补充。该功能主要是对标题进行自动的补充。 具…

接收与发送ipv6数据包

一、ipv6的概念 IPv6 是英文 “Internet Protocol Version 6”&#xff08;互联网协议第 6 版&#xff09;的缩写&#xff0c;是互联网工程任务组&#xff08;IETF&#xff09;设计的用于替代 IPv4 的下一代 IP 协议&#xff0c;其地址数量号称可以为全世界的每一粒沙子编上…

龙虎榜——20250321

今日A股龙虎榜方向分析 根据2025年3月21日龙虎榜数据&#xff08;涨停56家&#xff0c;跌停31家&#xff09;&#xff0c;市场呈现结构性分化行情&#xff0c;资金聚焦海洋经济、机器人、锂电等主线&#xff0c;部分个股遭机构大幅抛售。以下是具体方向解析&#xff1a; 一、资…

springboot milvus search向量相似度查询 踩坑使用经验

1.前提提要&#xff1a;java的pom 版本为&#xff1a;2.4.9 milvus 版本是&#xff1a;2.4.13-hotfix 2.先来工具类方法 /*** 向量搜索* param client* param query* return*/public SearchResp search(NonNull MilvusClientV2 client, NonNull VectorCondition query) {final …

[网络安全] 滥用Azure内置Contributor角色横向移动至Azure VM

本文来源于团队的超辉老师&#xff0c;其系统分析了Azure RBAC角色模型及其在权限滥用场景下的攻击路径。通过利用AADInternals工具提升用户至Contributor角色&#xff0c;攻击者可在Azure VM中远程执行命令&#xff0c;创建后门账户&#xff0c;实现横向移动。文中详述了攻击步…

Android Compose 基础布局之 Box 和 Stack 源码深度剖析(九)

Android Compose 基础布局之 Box 和 Stack 源码深度剖析 一、引言 1.1 Android 开发中布局的重要性 在 Android 应用开发里&#xff0c;布局是构建用户界面&#xff08;UI&#xff09;的关键环节。良好的布局设计能够提升用户体验&#xff0c;使应用界面更加美观、易用且具有…

知识蒸馏:让大模型“瘦身“而不失智慧的魔术

引言&#xff1a;当AI模型需要"减肥" 在人工智能领域&#xff0c;一个有趣的悖论正在上演&#xff1a;大模型的参数规模每年以10倍速度增长&#xff0c;而移动设备的算力却始终受限。GPT-4的1750亿参数需要价值500万美元的GPU集群运行&#xff0c;但现实中的智能设备…