一起学习LeetCode热题100道(61/100)

devtools/2024/11/19 6:19:29/

61.分割回文串(学习)

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是
回文串
。返回 s 所有可能的分割方案。

示例 1:
输入:s = “aab”
输出:[[“a”,“a”,“b”],[“aa”,“b”]]

示例 2:
输入:s = “a”
输出:[[“a”]]

提示:
1 <= s.length <= 16
s 仅由小写英文字母组成

解析:
一、变量定义
1.result:一个数组,用于存储所有可能的分割方案。
2.current:一个数组,用于在回溯过程中构建当前的分割方案。

二、辅助函数:isPalindrome
1.这个函数检查传入的字符串str是否是回文串。它通过比较字符串的首尾字符,并逐步向中心移动,来验证整个字符串是否对称。

三、回溯函数:backtrack
1.这是解决问题的核心函数。它使用回溯算法来尝试所有可能的分割方式。
2.基准情况:如果start等于字符串s的长度,说明已经遍历完整个字符串,此时将current(当前的分割方案)添加到result中。
3.循环遍历:从start开始,遍历字符串s的剩余部分。对于每个位置i,截取从start到i(包含i)的子串。
4.检查回文:使用isPalindrome函数检查截取的子串是否是回文串。
5.添加并继续:如果是回文串,则将其添加到current中,并递归调用backtrack(i + 1)来继续处理剩余的字符串。
6.撤销选择:回溯结束后,需要从current中移除最后添加的子串,以便尝试其他可能的分割方式。

四、调用回溯函数
1.在partition函数的末尾,通过调用backtrack(0)开始回溯过程,从字符串的起始位置开始尝试所有可能的分割。

var partition = function (s) {const result = [];const current = [];// 辅助函数:检查子串是否是回文串  function isPalindrome(str) {let left = 0;let right = str.length - 1;while (left < right) {if (str[left] !== str[right]) {return false;}left++;right--;}return true;}// 回溯函数  function backtrack(start) {// 如果已经遍历完整个字符串,则将当前分割方案添加到结果中  if (start === s.length) {result.push([...current]);return;}for (let i = start; i < s.length; i++) {// 截取从start到i的子串  const substring = s.substring(start, i + 1);// 检查子串是否是回文串  if (isPalindrome(substring)) {// 如果是回文串,则将其添加到当前分割方案中  current.push(substring);// 继续向后回溯  backtrack(i + 1);// 回溯结束,撤销选择  current.pop();}}}backtrack(0);return result;
};```

http://www.ppmy.cn/devtools/104824.html

相关文章

java编辑器——IntelliJ IDEA

java编辑器有两种选择——IntelliJ IDEA和VsCode。其中IntelliJ IDEA现在是企业用的比较多的&#xff0c;是专门为java设计的&#xff0c;而VsCode则是通过插件来实现Java编辑的。 1.IntelliJ IDEA 官网下载链接&#xff1a;https://www.jetbrains.com/idea/ 注意选择社区版…

惠中科技化解光伏板清洁难题

惠中科技化解光伏板清洁难题 在绿色能源革命的浪潮中&#xff0c;光伏电站作为清洁能源的璀璨明珠&#xff0c;正以前所未有的速度照亮着能源转型的道路。然而&#xff0c;光伏板长期暴露于自然环境中&#xff0c;不可避免地遭受灰尘、鸟粪、油污等污染物的影响&#xff0c;让…

深入理解Redis(一)----Redis简介+Redis为什么这么快

一.Redis简介 Redis是一个开源的内存中的数据结构存储系统&#xff0c;它可以用作&#xff1a;数据库、缓存和消息中间件。 注&#xff1a;数据库的作用相当于MySQL&#xff0c;可以永久存储相关的数据&#xff0c;和MySQL不一样的是&#xff0c;Redis提供了多种数据基本数据类…

探索未知,悦享惊喜 —— 您的专属盲盒小程序,即将开启奇妙之旅

在这个充满无限可能的数字时代&#xff0c;每一次点击都可能是通往惊喜的门户。我们匠心打造的“惊喜盲盒”小程序&#xff0c;正是为了给您带来前所未有的娱乐体验与心灵触动。在这里&#xff0c;每一份盲盒都蕴藏着精心挑选的宝藏&#xff0c;等待着与您的不期而遇。 【探索…

网络层 III(划分子网和构造超网)【★★★★★★】

&#xff08;★★&#xff09;代表非常重要的知识点&#xff0c;&#xff08;★&#xff09;代表重要的知识点。 一、网络层转发分组的过程 分组转发都是基于目的主机所在网络的&#xff0c;这是因为互联网上的网络数远小于主机数&#xff0c;这样可以极大地压缩转发表的大小。…

【国考】特值法

特值法 题干中存在乘除关系&#xff0c;且对应量未知。 例3&#xff1a;甲、乙、丙三个工程队的效率比为6&#xff1a;5&#xff1a;4,现将A、B两项工作量相同的工程交给这三个工程队,甲队负责A工程,乙队负责B工程,丙队参与A工程若干天后转而参与B工程.两项工程同时开工,耗时16…

Python实现t-分布随机邻域嵌入(t-SNE)降维算法

目录 Python实现t-分布随机邻域嵌入&#xff08;t-SNE&#xff09;降维算法的博客引言t-SNE算法原理t-SNE的优势与局限Python实现t-SNE算法1. 创建t-SNE类2. 示例场景&#xff1a;MNIST手写数字数据集3. 结果分析 结论运行结果 Python实现t-分布随机邻域嵌入&#xff08;t-SNE&…

CSS 的超级好用的object-fit属性

object-fit 是 CSS 中的一个非常有用的属性&#xff0c;它决定了替换元素&#xff08;如 <img>、<video>、<canvas> 等&#xff09;的内容应该如何适应其使用的高度和宽度。这个属性解决了在不同布局和屏幕尺寸下&#xff0c;如何优雅地控制元素内容显示的问…