LeetCode——palindrome-partitioning-ii*

Posted Shaw_喆宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode——palindrome-partitioning-ii*相关的知识,希望对你有一定的参考价值。

Q:给出一个字符串s,分割s使得分割出的每一个子串都是回文串
计算将字符串s分割成回文分割结果的最小切割数
例如:给定字符串s="aab",
返回1,因为回文分割结果["aa","b"]是切割一次生成的。
A:
动态规划问题。
cut[i] - 表示子串(0,i)的最小回文切割,则最优解在cut[s.length-1]中。
分几种情况:
1.初始化:当字串s.substring(0,i+1)(包括i位置的字符)是回文时,cut[i] = 0(表示不需要分割);否则,cut[i] = i(表示至多分割i次);
2.对于任意大于1的i,如果s.substring(j,i+1)(j<=i,即遍历i之前的每个子串)是回文时,cut[i] = min(cut[i], cut[j-1]+1);

    public static int minCut(String s) {
        if (s.length() <= 1)
            return 0;
        int[] cut = new int[s.length()];
        cut[0] = 0;
        for (int i = 1; i < s.length(); i++) {
            String sub = s.substring(0, i + 1);
            cut[i] = palind(sub) ? 0 : i;
            for (int j = i; j > 0; j--) {
                sub = s.substring(j, i + 1);
                if (palind(sub))
                    cut[i] = Integer.min(cut[i], cut[j - 1] + 1);
            }
        }
        return cut[s.length() - 1];
    }

    public static boolean palind(String s) {
        StringBuilder s1 = new StringBuilder(s);
        String s2 = s1.reverse().toString();
        return s.equals(s2);
    }

以上是关于LeetCode——palindrome-partitioning-ii*的主要内容,如果未能解决你的问题,请参考以下文章

如何做LeetCode

leetcode可以写在简历上吗

[Leetcode]leetcode1-10题随记

leetcode分类刷题(续2)

leetcode分类刷题

LintCode,hihoCoder,LeetCode有啥区别