力扣刷题记录 -- JAVA--70---131. 分割回文串


一、题目

在这里插入图片描述

二、代码

class Solution 
{
    List<List<String>> re_list = new LinkedList<>();
    LinkedList<String> temp_list = new LinkedList<>();
    // StringBuilder str = new StringBuilder();
    public boolean whether(String str)
    {
        if(str.length()==0) return false;
        int i;
        int length ;
        length = str.length();
        for(i=0;i<length/2;i++)
        {
            if(str.charAt(i)!=str.charAt(length-1-i)) return false;
        }
        return  true;
    }
    public void back(String s ,int start)
    {
        System.out.println("start "  +start);
         int i;
         int length;
         length = s.length();
         if(start == length)
         {
            //  System.out.println("长度符合要求");
             int length_list = temp_list.size();
             boolean temp_bool = true;
             for(i=0;i<length_list;i++)
             {
                 if(whether(temp_list.get(i))==false) 
                 {
                    temp_bool=false;
                    break;
                 }
             }
             if(temp_bool==true) re_list.add(new LinkedList(temp_list));
         }
         if(start > length) return;
         length = s.length();
         for(i=start+1;i<=length;i++)
         {
             temp_list.add(s.substring(start,i));
            //  System.out.println("切割  " +s.substring(start,i));
             back(s,i); 
             temp_list.removeLast();
         }
        
    }
    public List<List<String>> partition(String s) 
    {
       back(s,0);
    //    System.out.println(whether(str));
       return re_list;
    }
}

三、运行结果

在这里插入图片描述

四、附录

二刷

class Solution 
{
    List<List<String>> re = new LinkedList<>();
    List<String> path = new LinkedList<>();
    public boolean whether(String s)
    {
        int i;
        int length = s.length();
        for(i=0;i<length/2;i++)
        {
           if(s.charAt(i)!=s.charAt(length-1-i)) return false;
        }
        return true;
    }
    public void track(String s,int start)
    {

        int i;
        int length = s.length();
        //System.out.println("  start  "+start);
        if(start == length) re.add(new LinkedList<>(path));
        if(start>length) return;

        for(i=start+1;i<=length;i++)
        {
            String temp = s.substring(start,i);
            if(whether(temp) == true) 
            {
                 //System.out.println("  为真 "+"   start  "+start+"   i   "+i+"  ");
                 path.add(s.substring(start,i));
                 track(s,i);
                 path.removeLast();
            }
        }
    }
    public List<List<String>> partition(String s) 
    {
        //System.out.println("  "+whether("aab"));
        track(s,0);
        return re;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@白圭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值