回溯----7.分割回文串

回溯----7.分割回文串_第1张图片

题目链接

/**

            将字符串分割为若干回文子串;回文子串: 单个字符、正序倒序一样。

            大致执行流程(for循环 + 递归):

                        首先从i = 0开始,从第一个元素处开始切割,判断是否是回文子串

                        若是则保存到tempRes中,并从i + 1处开始重复上述流程从第一个元素开始切割,直到切割到最后一个元素保存结果

                        若不是则迭代i,从下一个元素处开始尝试切割

                        .......

                        回溯:

                            回溯index(起始点),迭代i(切割点),重复上述流程直到切割到最后一个元素

                            继续回溯index,直到最初始的for循环执行完毕切割到最后一个元素,执行完毕得到所有结果          

*/

class Solution {
    //保存所有结果
    private List> res = new ArrayList<>();
    //保存单次临时结果
    private List tempResult = new ArrayList<>();

    //避免重复传参
    private String s;

    public List> partition(String s) {
        /**
            将字符串分割为若干回文子串;回文子串: 单个字符、正序倒序一样。
            大致执行流程(for循环 + 递归):
                        首先从i = 0开始,从第一个元素处开始切割,判断是否是回文子串
                        若是则保存到tempRes中,并从i + 1处开始重复上述流程从第一个元素开始切割,直到切割到最后一个元素保存结果
                        若不是则迭代i,从下一个元素处开始尝试切割
                        .......
                        回溯:
                            回溯index(起始点),迭代i(切割点),重复上述流程直到切割到最后一个元素
                            继续回溯index,直到最初始的for循环执行完毕切割到最后一个元素,执行完毕得到所有结果           
        */

        this.s = s;
        backtrack(0);

        return res;
    }

    private void backtrack(int index) {
        //回文子串合法性判断在单层搜索逻辑中
        if(index == s.length()) {
            res.add(new ArrayList<>(tempResult));
            return;
        }

        for(int i = index; i < s.length(); i++) {
            //当前切割出的子串是回文子串则保存在temp中,并迭代起点继续切割
            if(isHW(index,i)) {
                tempResult.add(s.substring(index,i + 1)); //substring(start,end)-->[start,end)

                //从i + 1开始继续切割
                backtrack(i + 1);

                //回溯
                tempResult.remove(tempResult.size() - 1);
            }
        }
    }

    //回文子串的判断
    private boolean isHW(int start, int end) {
        while(start < end) {
            if(s.charAt(start) != s.charAt(end)) {
                return false;
            }
            start++;
            end--;
        }
        return true;
    }
}

你可能感兴趣的:(算法日记-Hot100,算法)