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

力扣:131. 分割回文串

 回溯解法思路:

1.先声明一个集合来接受全部的回文子串组合,在声明一个集合来接收单个回文子串的组合。

2.写一个回溯函数,里面有终止条件和遍历全部组合的for循环来进行遍历全部的组合,终止条件为开始索引等于字符串的长度时,表示遍历完了整个字符串,li2加入到li1中去。在遍历for循环中要回溯操作,同时要检查分割段是否为回文子串,如果不是回文子串就跳过本次循环。 要写一个检查回文子串的函数,其中用双指针来检查这个分割段是否是回文子串。

​
class Solution {
     //接收全部的回文子串
    List<List<String>> li1=new ArrayList<>();
    //接收单个回文子串
    List<String> li2=new ArrayList<>();
    public List<List<String>> partition(String s) {
     //调用回溯函数
      huisu(s,0);
       return li1;
    }
    //回溯函数
 public void huisu(String s,int startIndex){
        //判断分割到了字符串的末尾
        if(startIndex==s.length()){
              li1.add(new ArrayList<>(li2));
            return;
         }
        //暴力的遍历全部组合
        for(int j=startIndex;j<s.length();j++){
              //如果是回文子串,则记录
            if(huiwen(s,startIndex,j)){
                //进行分割的字符操作
              String st = s.substring(startIndex, j+ 1);
                  li2.add(st);
            }else {
                //不是回文子串跳过这次循环
                continue;
            }
            //调用方法进行递归。
            huisu(s,j+1);
            //得到回文串之后,回溯
            li2.removeLast();
        }
    }
    //回文函数
    public boolean huiwen(String s,int startIndex,int j){
        //遍历用双指针的方法来检查字符串是否是回文子串
        while(startIndex<j){
          if(s.charAt(startIndex)!=s.charAt(j)){
              return false;
          }
          startIndex++;
          j--;
        }
        return true;
    }
}

​


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

相关文章:

  • Git学习笔记
  • Java中的依赖注入是什么?它如何工作?
  • Jenkins与不同阶段测试的完美结合
  • JVM远程调试原理剖析
  • R5天气识别学习笔记
  • 告别 Excel,拥抱 R 语言:开启数据分析新时代
  • langgraph学习--创建基本的agent执行器
  • 汽车信息安全--SHE中的密钥管理(一)
  • setState的参数
  • 2 月 5 日算法练习- 字符串
  • easyexcel解析跨多行的数据
  • Linux 【docker系列1 - docker 安装与使用】
  • 解决hive表新增的字段查询为空null问题
  • 2.5 作业
  • 从 AGP 4.1.2 升级到 7.5.1——动态添加仓库
  • 【Java】小白友好的MyBatis基础XML开发学习笔记
  • 什么是Java中的弱引用(Weak Reference)和软引用(Soft Reference)?
  • 【漏洞复现】大华智慧园区综合管理平台bitmap接口存在任意文件上传漏洞
  • 某赛通电子文档安全管理系统 UploadFileToCatalog SQL注入漏洞复现
  • 问题:塑瓷后的牙冠要比完成的牙冠大() #学习方法#其他
  • Java入门之JavaSe(韩顺平p1-p?)
  • AI应用开发-python实现redis数据存储
  • LeetCode、1137. 第 N 个泰波那契数【简单,动态规划】
  • 十分钟掌握Go语言==运算符与reflect.DeepEqual函数处理interface{}值的比较规则
  • C++泛型编程:类模板(下)
  • 【Iceberg学习一】什么是Iceberg?