代码随想录 回溯

server/2025/3/12 2:00:15/

131. 分割回文串 - 力扣(LeetCode)

这题挺难的,搞了两个小时才一知半解吧qaq

思路:首先要明白什么作为终止条件,其次就是for循环内什么时候插入path,剩下的就是套模板了,其次补充一下回文数的判断即可

class Solution {
private:vector<vector<string>> result;vector<string> path;void backtracking(const string& s,int startIndex){if(startIndex>=s.size()){//为什么仅需判断大小即可,不会出现找不到的情况吗?result.push_back(path);return;}for(int i=startIndex;i<s.size();i++){if(ishui(s,startIndex,i)){string str=s.substr(startIndex,i-startIndex+1);//一开始分割为一个个的时候,i和index不是一直一样吗,什么时候i会大于startIndex呢path.push_back(str);}else continue;//如果不加会怎么样?backtracking(s,i+1);path.pop_back();}}bool ishui(const string& s,int startIndex,int end){for(int i=startIndex,j=end;i<j;i++,j--){if(s[i]!=s[j]) return false;}return true;}
public:vector<vector<string>> partition(string s) {backtracking(s,0);return result;}
};

ps:代码注释是我第一次写的时候的疑问

总结:1.为什么仅需判断大小?因为只要非空字符串必有一组可以成立的分割组合,而index代表开始分割的位置,当分割到最后一个或大于最后一个,即全部分割完了

2.什么时候i开始变得?当横向遍历,尝试分割更长的字符串时(这里是横向和纵向没了解清楚),横向的时候startIndex是不变的,变得是末端i的位置。

横向:初次分割的位置,剩下的没分割的就交给纵向分割。

纵向:选择了第一次分割的若干情况的一种,然后继续分割剩余的情况

3.若漏了continue?会遍历无效组合,比如说横向分割的时候就不是回文串,纵向时又找到若干组合,但起始就是错的就会出现很多无效组合,所以一定要跳过无效的横向组合。


http://www.ppmy.cn/server/174317.html

相关文章

简记_硬件系统设计之需求分析要点

目录 一、 功能需求 二、 整体性能需求 三、 用户接口需求 四、 功耗需求 五、 成本需求 六、 IP和NEMA防护等级需求 七、 认证需求 功能需求 供电方式及防护 供电方式&#xff1a;市电供电、外置直流稳压电源供电、电池供电、PoE&#xff08;Power Over Ether…

《基于锂离子电池放电时间常数的自动化电量评估系统设计》k开题报告

目录 1.文献综述 2 选题背景及其意义 3 研究内容 3.1 MATLAB算法开发与仿真测试 3.2 锂离子电池模型建立 3.3 评估锂离子电池健康状态方法 3.4 放电时间常数的提取与分析 3.5 自动化电量评估系统设计 3.5.1硬件选择 3.5.2软件开发 3.5.3单片机硬件系统设计 3.5.4单…

Varlens(手机上的单反)Ver.1.9.3 高级版.apk

Varlens 是一款专业级手机摄影软件&#xff0c;旨在通过丰富的功能和高自由度参数调节&#xff0c;让手机拍摄效果媲美微单相机。以下是核心功能总结&#xff1a; 一、核心功能 专业拍摄模式 支持手动/自动/程序模式&#xff0c;可调节ISO、快门速度、EV、白平衡等参数27 提供…

几种linux获取系统运行时间的方法

在开发 、测试和运维中&#xff0c;获取系统运行时间是一个很重要的参数指标&#xff0c;下面是常用的获取系统时间的方法&#xff0c;以SKYLAB的SKW3000路由模组的运行时间为例进行说明&#xff1a; 一.通过指令获取 获取系统运行时间的指令为uptime&#xff0c;具体操作输出如…

代码随想录算法训练营第六十一天 | 108. 冗余连接 109. 冗余连接II

108. 冗余连接 题目链接&#xff1a;KamaCoder 文档讲解&#xff1a;代码随想录 状态&#xff1a;AC Java代码&#xff1a; import java.util.*;class Main {public static int[] father;public static void main(String[] args) {Scanner scan new Scanner(System.in);int n…

手写一个Tomcat

Tomcat 是一个广泛使用的开源 Java Servlet 容器&#xff0c;用于运行 Java Web 应用程序。虽然 Tomcat 本身功能强大且复杂&#xff0c;但通过手写一个简易版的 Tomcat&#xff0c;我们可以更好地理解其核心工作原理。本文将带你一步步实现一个简易版的 Tomcat&#xff0c;并深…

uniapp 微信小程序 升级 uniad插件版本号

问题描述&#xff1a; 每次提交代码升级的时候会弹窗提示&#xff1a;uniad插件版本太低… 解决办法 一、使用微信小程序开发工具点击右上角 查看到最新版本&#xff1a;1.3.4 二、在app.json中改为最新的版本即可 "uni-ad": {"version": "1.3.4&q…

20天 - TCP 和 UDP 有什么区别?说说 TCP 的三次握手?TCP 是用来解决什么问题?

TCP 和 UDP 有什么区别&#xff1f; TCP&#xff08;传输控制协议&#xff09;和 UDP&#xff08;用户数据报协议&#xff09;都是传输层的网络协议&#xff0c;它们的主要区别如下&#xff1a; 连接方式 TCP&#xff1a;面向连接的协议&#xff0c;类似于打电话&#xff0c…