首页 > 其他分享 >leetcode131 分割回文串

leetcode131 分割回文串

时间:2025-01-09 18:44:13浏览次数:1  
标签:分割 String int ArrayList leetcode131 ans new currentNum 回文

leetcode 131

image-20250109173826563

思路:回溯

比如说aab,对于每个元素currentNum,有两种选择:

1.如果currentNum<len-1,可以将当前元素加入到currentStr中,然后dfs(start,currentNum+1)。而currentNum==len-1时不能dfs(start,currentNum+1),这样下一轮循环就执行以下代码了

if (currentNum == len){
	ans.add(new ArrayList<>(currentList));
	return;
}

会导致最后一个str丢失,并且结果会加入到ans中。

image-20250109183746859

2.如果start到currentNum是回文串,可以取start到currentNum这一字串加到ans中,然后dfs(currentNum+1,currentNum+1)

代码:

class Solution {
    List<List<String>> ans = new ArrayList<>();

    public List<List<String>> partition(String s) {
        dfs(0, 0, s.length(), s, "", new ArrayList<>());
        return ans;
    }

    public void dfs(int startNum, int currentNum, int len, String s, String currentStr, List<String> currentList) {
        //每一位有两种选法,一种是加在上一个String里,另一种是新建String
        if (currentNum == len){
            ans.add(new ArrayList<>(currentList));
            return;
        }
        if (currentNum<len-1){
            dfs(startNum, currentNum + 1, len, s, currentStr, currentList);
        }
        //加在上一个string里
        if (isPalindrome(s, startNum, currentNum)) {
            currentList.add(s.substring(startNum, currentNum+1));
            dfs(currentNum + 1, currentNum + 1, len, s, currentStr, currentList);
            currentList.remove(currentList.size() - 1);
        }
        //
    }
    
    public boolean isPalindrome(String s, int left, int right) {
        while (left < right) {
            if (s.charAt(left) != s.charAt(right)) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
}

标签:分割,String,int,ArrayList,leetcode131,ans,new,currentNum,回文
From: https://www.cnblogs.com/vastjoy/p/18662714

相关文章

  • 分割等和子集(动态规划)
    给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例1:输入:nums=[1,5,11,5]输出:true解释:数组可以分割成[1,5,5]和[11]。示例2:输入:nums=[1,2,3,5]输出:false解释:数组不能分割成两个元......
  • Java实现回文排列问题的探讨
    Java实现回文排列问题的探讨在编程的世界里,解决一个具体问题往往有多种方法,而选择合适的方法不仅能提高代码的效率,还能让代码更加优雅易懂。今天,我们就来探讨一下如何使用Java语言来解决一个有趣的问题——回文排列问题。问题描述回文排列问题源自LeetCode的第266题,它要求我们......
  • Delphi窗口分割用splitter分割2个Panel
    在Delphi中放置两个Panel和一个Splitter组件,可以按照以下步骤操作:添加第一个Panel:在Form上添加一个Panel组件。设置第一个Panel的Align属性为alLeft(如果你希望垂直分割)或alTop(如果你希望水平分割)。添加Splitter组件:在Form上添加一个Splitter组件。设置Splitter的A......
  • 【即插即用完整代码】CVPR 2024部分单头注意力SHSA,分类、检测和分割SOTA!
    文章末尾,扫码添加公众号,领取完整版即插即用模块代码!适用于所有的CV二维任务:图像分割、超分辨率、目标检测、图像识别、低光增强、遥感检测等摘要(Abstract)背景与动机:近年来,高效的视觉Transformer(ViT)在资源受限的设备上表现出色,具有低延迟和良好的性能。传统的高效ViT模型......
  • (2-5-02)目标检测与分割:SLAM定位与地图构建(02) Deep SLAM算法+图优化算法
    2.5.2 DeepSLAM算法DeepSLAM(SimultaneousLocalizationandMapping)是一种结合深度学习技术和SLAM技术的方法,旨在通过使用深度神经网络来改进SLAM系统的性能。SLAM是一种用于在未知环境中同时估计相机(或传感器)的位置和构建地图的技术。在DeepSLAM中,深度学习模型通常用......
  • SQL把字符串按逗号分割成记录
        在SQL中,可以通过以下方法将字符串按逗号分割,并将每个分割的值作为单独的记录插入到结果集中。以下是针对不同数据库系统的实现方法:1.使用STRING_SPLIT(SQLServer2016+)  STRING_SPLIT是SQLServer提供的内置函数,用于将字符串按分隔符拆分。DECLARE@......
  • YOLOv8多任务学习:界面+目标检测+语义分割+追踪+姿态识别(姿态估计)+界面DeepSort_ByteT
    YOLOv8-DeepSort/ByteTrack-PyQt-GUI:全面解决方案,涵盖目标检测、跟踪和人体姿态估计YOLOv8-DeepSort/ByteTrack-PyQt-GUI是一个多功能图形用户界面,旨在充分发挥YOLOv8在目标检测/跟踪和人体姿态估计/跟踪方面的能力,与图像、视频或实时摄像头流进行无缝集成。支持该应用的Py......
  • Luogu P4287 SHOI2011 双倍回文 题解 [ 紫 ] [ manacher ]
    双倍回文:回文子串结论的经典应用。结论先放本题最关键的结论:一个字符串本质不同的回文子串最多只有\(n\)个。考虑如何证明:假设我们一个一个地在当前字符串(黑色部分)的结尾加入字符(红色部分),那么会出现如下情况:显然,加入红色字符后,字符串中最多只可能新出现一个本质不同的回文......
  • 使用Mask R-CNN模型来进行目标检测和实例分割 大规模高分辨率树种单木分割数据集 处理
    单木分割数据集。从14个不同树种类中分割和标注了23,000个树冠,采集使用了DJIPhantom4RTK无人机树种单木分割数据集。从14个不同树种类中分割和标注了23,000个树冠,采集使用了DJIPhantom4RTK无人机。正射tif影像,点云、arcgis详细标注单株树木矢量数据(并标明树木类型),数......
  • DL00684-山体滑坡实例/语义分割检测完整python代码含数据集
    https://item.taobao.com/item.htm?ft=t&id=872378688356山体滑坡是引发重大自然灾害的常见地质现象,尤其在山区、丘陵等地带,滑坡不仅对人民生命财产安全构成威胁,还会造成环境破坏和基础设施损毁。传统的山体滑坡检测方法依赖人工监测、地质勘探和局部传感器,这些方法不仅反应速度......