zoukankan      html  css  js  c++  java
  • 132. Palindrome Partitioning II

        /*
         * 132. Palindrome Partitioning II
         * 12.29 by Mingyang
         * 首先设置dp变量 cuts[len+1]。cuts[i]表示从第i位置到第len位置(包含,即[i, len])的切割数(第len位置为空)。
         * 初始时,是len-i。比如给的例子aab,cuts[0]=3,就是最坏情况每一个字符都得切割:a|a|b|' '。cuts[1] = 2, 即从i=1位置开始,a|b|' '。、
         * cuts[2] = 1 b|' '。cuts[3]=0,即第len位置,为空字符,不需要切割。
         * 上面的这个cuts数组是用来帮助算最小cuts的。
         * 还需要一个dp二维数组matrixs[i][j]表示字符串[i,j]从第i个位置(包含)到第j个位置(包含) 是否是回文。
         * 如何判断字符串[i,j]是不是回文?
         * 1. matrixs[i+1][j-1]是回文且 s.charAt(i) == s.charAt(j)。
         * 2. i==j(i,j是用一个字符)
         * 3. j=i+1(i,j相邻)且s.charAt(i) == s.charAt(j)
         * 当字符串[i,j]是回文后,说明从第i个位置到字符串第len位置的最小cut数可以被更新了,
         * 那么就是从j+1位置开始到第len位置的最小cut数加上[i,j]|[j+1,len - 1]中间的这一cut。
         * 即,Math.min(cuts[i], cuts[j+1]+1) 
         * 最后返回cuts[0]-1。把多余加的那个对于第len位置的切割去掉,即为最终结果。
         */
          public int minCut(String s) {
                int n = s.length();
                boolean isPal[][] = new boolean[n][n];
                int cut[] = new int[n];
                for (int j = 0; j < n; j++) {
                    cut[j] = j;//从0到j的最小cut数
                    for (int i = 0; i <= j; i++) {
                        //如果子串 s[i...j]是回文串
                        if (s.charAt(i) == s.charAt(j)&& (j - i <= 1 || isPal[i + 1][j - 1])) {
                            isPal[i][j] = true;
                            if (i > 0)
                                cut[j] = Math.min(cut[j], cut[i - 1] + 1);
           //每次遇到回文串就需要把这个cut更新一下,因为如果出现了回文串就会将cut减少,可以将后半部分的回文串变为0,只需加上前面的加1
                            else
                                cut[j] = 0; //如果 s[0...j]是回文串,则说明不需要切割
                        }
                    }
                }
                return cut[n - 1];
            }
  • 相关阅读:
    关于Lucas定理、多项式Exp的一些思考
    Binet-Cauchy定理的证明
    CSP2019 树上的数 题解
    Graphviz学习
    Luogu P2221 [HAOI2012]高速公路题解
    CSP2019 树的重心 题解
    CSP2019 Emiya 家今天的饭 题解
    UVA10559 方块消除 Blocks 题解
    关于二次项系数为1的二元一次不定方程解法的探究
    关于对STL容器重载运算符的问题
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5518585.html
Copyright © 2011-2022 走看看