【组合回溯】Leetcode 131. 分割回文串

news2024/11/23 10:43:18

【组合回溯】Leetcode 131. 分割回文串

    • 解法 切割=组合回溯

---------------🎈🎈131. 分割回文串 题目链接🎈🎈-------------------
131. 分割回文串

解法 切割=组合回溯

在这里插入图片描述

全局变量:result存储所有path的集合,path用来记录切割过的回文子串。

递归参数:字符串s,每次递归时开始截取的位置startindex(保证不重复)

终止条件:切割线切到了字符串最后面,说明找到了一种切割方法,此时就是本层递归的终止条件。
即当startindex == 字符串长度的时候,就可以收获结果集path,并终止当前递归。

单层搜索的逻辑:for循环遍历当前层从startindex开始的所有切割位置
此时s.substring(startindex,i+1)——[startindex, i] 就是要截取的子串。首先判断这个子串是不是回文,如果是回文,就加入在 path中。如果不是那就代表已经GG了,就可以continue跳过目前的for了。
之后递归下一层,寻找i+1为起始位置的子串
之后回溯即可

判断回文:双指针向中间遍历即可

class Solution {
    List<List<String>> result = new ArrayList<>();
    List<String> path = new ArrayList<>();  // 单一结果,相当于收集路径

    public List<List<String>> partition(String s) {
        helper(s,0);
        return result;
    }
    public void helper(String s, int startindex){
        // 终止条件: 如果起始位置等于s的大小,说明找到了一组分割方案
        if(startindex == s.length()){  // 当startindex= s.length()的时候,就可以把收获的path弄到result大列表中了
            result.add(new ArrayList<>(path));
            return;
        }

        // 单层搜索的逻辑
        for(int i = startindex; i < s.length(); i++){
            String temp = s.substring(startindex,i+1); //每一层切出来的前半部分的子串[startindex,i]
            if(judge(temp)){ // 如果是回文子串 就加入到path中
                path.add(temp);
            }
            else{
                continue;
            }
            helper(s,i+1); //递归:起始位置后移,寻找i+1为起始位置的子串,保证不重复
            path.removeLast(); // 回溯 弹出本次已经添加的子串

        }
    }
    public boolean judge(String s){ // 判断是不是回文串
        int left = 0;
        int right = s.length()-1;
        while(left<=right){
            if(s.charAt(left) == s.charAt(right)){
                left++;
                right--;
            } else{
                return false;
            }
        }
        return true;
    }
}

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

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

相关文章

新!PCA+DBO+K-means聚类,蜣螂优化算法DBO优化K-means,适合学习,也适合发paper。

PCADBOK-means聚类&#xff0c;蜣螂优化算法DBO优化K-means&#xff0c;适合学习&#xff0c;也适合发paper。 一、 蜣螂优化算法 摘要&#xff1a;受蜣螂滚球、跳舞、觅食、偷窃和繁殖等行为的启发&#xff0c;提出了一种新的基于种群的优化算法(Dung Beetle Optimizer, DBO…

拜占庭将军问题相关问题

1、拜占庭将军问题基本描述 问题 当我们讨论区块链共识时&#xff0c;为什么会讨论拜占庭将军问题&#xff1f; 区块链网络的本质是一个分布式系统&#xff0c;在存在恶意节点的情况下&#xff0c;希望 整个系统当中的善良节点能够对于重要的信息达成一致&#xff0c;这个机…

8.6 Springboot项目实战 Spring Cache注解方式使用Redis

文章目录 前言一、配置Spring Cache1. @EnableCaching2. 配置CacheManager3. application.properties配置二、使用注解缓存数据1. 使用**@Cacheable** 改造查询代码2. 使用**@CacheEvict** 改造更新代码前言 在上文中我们使用Redis缓存热点数据时,使用的是手写代码的方式,这…

每日学习笔记:C++ STL 的forward_list

定义 特点 操作函数 元素查找、移除或安插 forward_list::emplace_after arg...指的是元素构造函数的参数&#xff08;0~N个&#xff09; #include <iostream> #include <memory> #include <list> #include <forward_list> using namespace std;class…

【数据结构】深入理解AVL树:实现和应用

AVL树是一种自平衡的二叉搜索树&#xff0c;它能够保持良好的平衡性质&#xff0c;使得在最坏情况下的时间复杂度也能保持在对数级别。本文将深入介绍AVL树的原理、实现和应用&#xff0c;并通过示例代码演示其基本操作。 文章目录 什么是AVL树&#xff1f;AVL树的实现在AVL树…

Python主成分分析和聚类分析

项目背景 最近遇到这样一个需求&#xff1a; Python主成分分析和聚类分析&#xff1f;商业场景你数据不变展示&#xff0c;主要是用来划分用户等级&#xff0c;用来人文关怀。 基本概念 主成分分析&#xff08;PCA&#xff09;是一种常用的数据降维技术&#xff0c;通过线性变…

力扣巧题:翻倍链表的元素

此题的巧妙之处在于题目数据非常大只能在原链表中解决&#xff0c;遇到进一的问题如果尽早判断就不会有问题&#xff0c;而且第一位的判断非常巧妙 struct ListNode* doubleIt(struct ListNode* head){struct ListNode* Node (struct ListNode*)malloc(sizeof(struct ListNod…

ts版本微信小程序在wxml保存文件不刷新页面的解决办法

将project.config.json中的skylineRenderEnable改为false "skylineRenderEnable": false

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:TextClock)

TextClock组件通过文本将当前系统时间显示在设备上。支持不同时区的时间显示&#xff0c;最高精度到秒级。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 TextClock(options?…

【数据库】基础操作

系列文章目录 &#x1f308;座右铭&#x1f308;&#xff1a;人的一生这么长、你凭什么用短短的几年去衡量自己的一生&#xff01; &#x1f495;个人主页:清灵白羽 漾情天殇_计算机底层原理,深度解析C,自顶向下看Java-CSDN博客 ❤️相关文章❤️&#xff1a;清灵白羽 漾情天…

118. 杨辉三角(Java)

这里写目录标题 题目描述&#xff1a;输入:输出:代码实现&#xff1a; 题目描述&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 输入: numRows 5输出: [[1],[1,1],[1…

软件功能测试内容有哪些?湖南长沙软件测评公司分享

软件功能测试主要是验证软件应用程序的功能&#xff0c;且不管功能是否根据需求规范运行。是通过给出适当的输入值&#xff0c;确定输出并使用预期输出验证实际输出来测试每个功能。也可以看作“黑盒测试”&#xff0c;因为功能测试不用考虑程序内部结构和内部特性&#xff0c;…

24.第12届蓝桥杯省赛真题题解

A.空间&#xff08;100%&#xff09; 计算机存储单位计算 1TB2^10 GB 1GB2^10 MB 1MB2^10 KB 1KB2&10 B 1B8 bit(bit位二进制的最小的存储单位) #include <iostream> #include <cmath>using namespace std; //2^28B 2^2int main(){std::ios::sync_with_stdio…

MySQL初阶3——事务的初步理解

目录 一、事务的引入⭐⭐⭐⭐⭐ 1. 为什么需要事务 2. 事务的四大特性 二、事务的具体细节⭐⭐⭐⭐⭐ 1. 事务在并发会遇到的三种常见问题 2. MySQL事务隔离的四种级别 三、MySQL中如何开启事务 四、补充 很荣幸与诸君在篇文章“相遇”&#xff0c;祝大家身体健康&…

UnityShader:IBL

效果&#xff1a; 实现&#xff1a; Shader "MyShader/IBL" {Properties{_CubeMap ("环境贴图", Cube) "white" {}_Exposure("曝光",float)1.0_Color("颜色",color)(1,1,1,1)_NormalMap("法线贴图",2d)"bu…

JS仿淘宝滚动刷新简单实现

废话不多说&#xff0c;直接上代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title></title><style>* {margin: 0;padding: 0;}.box {width: 24.5%;height: 200px;float: left;}.box>…

#QT(事件--快捷键保存文件)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;QEvent,QMouseEvent,QKeyEvent。 在上一个文本编辑器的基础上实现快捷键"ctrls"保存文件。 3.记录 &#xff08;1&#xff09;查看QEVENT的有效事件 &#xff08;2&#xff09; 所有时间均继承于QEvent&#xff0c;任…

机试:元音处理

问题描述 代码示例 #include <bits/stdc.h> using namespace std;int main(){char string[1000];char ch getchar();int i 0;while(ch ! \n){string[i] ch;ch getchar();}char str[1000];int k 0;for(int j 0; j < i; j){if(string[j] a || string[j] e || …

(含链接)2024年NVIDIA GPU技术大会开发者合集(专为开发者挑选的合集)

2024年NVIDIA GPU技术大会开发者合集 我专门为开发者整理了NVIDIA GPU技术大会上专注技术的内容合集, 希望可以帮助开发者朋友们快速了解NVIDIA的最新技术. 注意:在电脑端打开更友好, 可以直接进入每一项的网页 文章目录 2024年NVIDIA GPU技术大会开发者合集如何登录和预约会…

Nacos注册中心与配置管理

Nacos注册中心与配置管理 1 Nacos注册中心1.1.认识Nacos1.2.服务注册到nacos1.3.服务分级存储模型1.4.权重配置1.5.环境隔离1.6.Nacos与Eureka的区别 2 CAP3.Nacos配置管理3.1.统一配置管理3.2.bootstrap了解3.3.配置热更新3.4.配置共享 1 Nacos注册中心 1.1.认识Nacos 国内公…