leetcode——131.分割回文串

public List<List<String>> partition(String s) {
        int len = s.length();
        List<List<String>> totalList = new ArrayList<>();
        if(len == 0){
            return totalList;
        }
        boolean[][] dp = new boolean[len][len];
        for(int i = 0;i<len;i++){
            for(int j = 0;j<=i;j++){
                if(s.charAt(i)==s.charAt(j) && (Math.abs(i-j)<=2 || dp[j+1][i-1])){
                    dp[j][i] = true;
                }
            }
        }
        List<String> list = new ArrayList<>();
        partition(s,0,list,totalList,dp);
        return totalList;
    }

    private void partition(String s, int start,List<String> list,List<List<String>> totalList , boolean[][] dp) {
        if(start == s.length()){
            totalList.add(new ArrayList<>(list));  //对list进行备份
            return;
        }
        for(int m = start;m<s.length();m++){
            if(dp[start][m]){
                list.add(s.substring(start,m+1));
                partition(s,m+1,list,totalList,dp);
                list.remove(list.size()-1);
            }
        }
    }

totalList.add(new ArrayList<>(list));  //对list进行备份

这点要记得,不进行拷贝的话,答案是不对的。

——2020.6.28

猜你喜欢

转载自www.cnblogs.com/taoyuxin/p/13203038.html