131. 分割回文串

一 题目:

二 思路:

回溯,不断尝试分割的可能,只有当前分割是回文串,才添加到回文串结果集里继续尝试

三 代码:

public class 分割回文串131 {
    //存储返回结果
    List<List<String>> res = new LinkedList<>();
    //存储已经是回文的分割结果
    Deque<String> deque = new LinkedList<>();

    public List<List<String>> partition(String s) {
        if (s==null || s.length()<1){
            return res;
        }

        // 结果集,元数据,第0个数据判断要不要拼到上一个字符串上还是独立,当前已集成结果
        search(s,0);
        return res;
    }

    //从startIndex是上一层的分割线,这次寻找新的分割
    private void search( String s, int startIndex) {
        //如果全部都分割判断结束了,说明deque存储的都是回文字符串了,直接添加
        if(startIndex>=s.length()){
            res.add(new LinkedList<>(deque));
            return;
        }

        //每个地方都尝试分割一次
        for (int i = startIndex; i <s.length() ; i++) {
            //如果这种分割得到的本次字符串是回文,就记录,并继续向下尝试分割
            if (isPartition(s,startIndex,i)){
                String str = s.substring(startIndex, i + 1);
                deque.addLast(str);
                search(s,i+1);
                deque.removeLast();
            }else {
                continue;
            }
        }
    }

    /**
     * 是否是回文串
     */
    boolean isPartition(String s,int start ,int end){
       while (start<end){
           if (s.charAt(start)!=s.charAt(end)){
               return false;
           }else {
               start++;
               end--;
           }
       }
       return true;
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容