当前位置: 首页 > article >正文

分割回文串力扣--131

目录

题目

思路

代码


题目

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

示例 1:

入:s = "aab"
输出:[["a","a","b"],["aa","b"]]

示例 2:

输入:s = "a"
输出:[["a"]]

提示:

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

思路

首先第一个难点是把回文和回溯算法联系在一起

例如对于字符串abcdef:

  • 组合问题:选取一个a之后,在bcdef中再去选取第二个,选取b之后在cdef中再选取第三个.....。
  • 切割问题:切割一个a之后,在bcdef中再去切割第二段,切割b之后在cdef中再切割第三段.....。

 

递归函数参数还需要startIndex,因为切割过的地方,不能重复切割,和组合问题也是保持一致的。 

从树形结构的图中可以看出:切割线切到了字符串最后面,说明找到了一种切割方法,此时就是本层递归的终止条件。

for (int i = startIndex; i < s.length(); i++)循环中,我们 定义了起始位置startIndex,那么 [startIndex, i] 就是要截取的子串。

首先判断这个子串是不是回文,如果是回文,就加入在path中,path用来记录切割过的回文子串。

切割过的位置,不能重复切割,所以,backtracking(s, i + 1); 传入下一层的起始位置为i + 1

代码

class Solution {
    List<List<String>> result=new ArrayList<>();
//最后结果集
    List<String> path=new ArrayList<>();
    public List<List<String>> partition(String s) {
        backTracking(s,0,new StringBuilder());
        return result;
    }
    public void backTracking(String s,int startIndex,StringBuilder sb){
        if(startIndex==s.length()){
//因为是起始位置一个一个加的,所以结束时start一定等于s.length,因为进入backtracking时一定末尾也是回文,所以cur是满足条件的
            result.add(new ArrayList<>(path));
            return;
        }
        for(int i=startIndex;i<s.length();i++){
            sb.append(s.charAt(i));
            if(check(sb)){
                path.add(sb.toString());
                 backTracking(s, i + 1, new StringBuilder());
                path.remove(path.size() -1);
            }
        }
    }
    public boolean check(StringBuilder sb){//判断回文 
        for (int i = 0; i < sb.length()/ 2; i++){
            if (sb.charAt(i) != sb.charAt(sb.length() - 1 - i)){return false;}
        }
        return true;
    }
}


http://www.kler.cn/a/555128.html

相关文章:

  • virtualbox怎么把主机剪切板里的内容复制进来
  • 人工智能之视频分割模型sam2源码解读
  • DeepSeek全栈技术体系解密:从算法源码到企业级智能体开发实战
  • [Windows] WPS 2024冬季更新版(版本号19770)
  • MYSQL总结(3)
  • 测试WSS服务器
  • 在UBUNTU下搭建Deepseek
  • 爬虫获取数据后的清洗与校验:完整指南
  • 【Elasticsearch】搜索时排序规则
  • Android Http-server 本地 web 服务
  • PyTorch Tensor 形状变化操作详解
  • 使用Spring Boot构建电商订单系统API的实践
  • 磐维数据库双中心容灾流复制集群搭建
  • dockerfile 使用环境变量
  • 新品 | 杰和科技最新发布搭载英特尔N95处理器的一体机主板CB4-208-U1
  • STL 在线转 3MF,开启 3D 模型转换新体验
  • PLC通信交互系统技术分享
  • 为AI聊天工具添加一个知识系统 之113 详细设计之54 Chance:偶然和适配 之2
  • 解决OpenEuler系统修改句柄无效的问题
  • 14.2 Auto-GPT 开源项目深度解析:从代码架构到二次开发实践