zoukankan      html  css  js  c++  java
  • LeetCode——分割回文串 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);
        }
    
  • 相关阅读:
    s3c6410_uboot中的代码重定位(nand->sdram)
    s3c6410_uart初始化及读写
    6410裸机开发教程下载
    s3c6410_时钟初始化
    linux device model简述
    CentOS安装flash player插件
    实例分析ELF文件动态链接
    581. Shortest Unsorted Continuous Subarray
    221. Maximal Square
    95. Unique Binary Search Trees II
  • 原文地址:https://www.cnblogs.com/xym4869/p/12487878.html
Copyright © 2011-2022 走看看