力扣: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;
    }
}

​

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值