LeetCode解析---132. 分割回文串 II

题目:

给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回符合要求的最少分割次数。

示例:

输入: “aab” 输出: 1 解释: 进行一次分割就可将 s 分割成 [“aa”,“b”] 这样两个回文子串。

分析:

可以用递归的方法,讲每次分割后得到的子串当做新的字符串来分割,最小分割数加1,如aabb,先分割成a|abb,abb便成新的字符串,这样便可以用到递归;

public int minCut(String s) {
    boolean[][] dp = new boolean[s.length()][s.length()];
    int[] min = new int[s.length()];
    min[0] = 0;
    for (int i = 1; i < s.length(); i++) {
        int temp = Integer.MAX_VALUE;
        for (int j = 0; j <= i; j++) {
            if (s.charAt(j) == s.charAt(i) && (j + 1 > i - 1 || dp[j + 1][i - 1])) {
                dp[j][i] = true;
                if (j == 0) {
                    temp = 0;
                } else {
                    temp = Math.min(temp, min[j - 1] + 1);
                }
            }
        }
        min[i] = temp;

    }
    return min[s.length() - 1];

}

原创文章 15 获赞 2 访问量 366

猜你喜欢

转载自blog.csdn.net/weixin_46747130/article/details/105645659