zoukankan      html  css  js  c++  java
  • 分割回文串 II

    分割回文串 II

    题目:
    给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。

    返回符合要求的最少分割次数。

    示例:

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

    解题思路:首先创建一个数组存储i到j是否是回文串,之后再用动态规划进行最少分割次数的求解

    class Solution {
        public int minCut(String s) {
            
            if(s == null)
                return 0;
            
            if(s.isEmpty()) 
                return 1;
            
            char ch[] = s.toCharArray();
            int len = ch.length;
            //isPail[i][j]表示i到j是否为回文串
            boolean isPail[][] = new boolean[len][len];
            
            for(int i = 0; i < len; i++) {
                for(int j = 0; j <= i; j++) {
                    isPail[j][i] = check(ch, j, i);
                    // System.out.println("i = " + i + ", j = " + j + ", dp = " + isPail[j][i]);
                }
            }
            
            //数组定义: dp[i]表示 0到i - 1的最少回文串个数
            int dp[] = new int[len + 1];
            dp[0] = 0;
            
            /**
            状态方程:if(isPail[j][i - 1]) dp[i] = min(dp[i], dp[j] + 1)
            **/
            for(int i = 1; i <= len; i++) {
                dp[i] = Integer.MAX_VALUE;
                for(int j = 0; j < i; j++) {
                    if(isPail[j][i - 1]) {
                        dp[i] = Math.min(dp[i], dp[j] + 1);
                    }
                }
            }
            
            //分割次数 = 回文串个数 - 1
            return dp[len] - 1;
        }
        
        //判断是否为回文串
        private boolean check(char[] ch, int l, int r) {
            int i = l, j = r;
            while(i < j && ch[i] == ch[j]) {
                i++;
                j--;
            }
            
            return i >= j;
        }
    }
    
  • 相关阅读:
    数据库高级查询
    简明python教程笔记一
    2017.12.29问题
    Windows下Python + Flask环境搭建
    ApiTestEngine框架
    接口测试框架ApiTestEngine相关
    IDEA查看JMeter源码
    IDEA安装,破解,和配置
    Uiautomator 2.0实例
    框架搭建实例
  • 原文地址:https://www.cnblogs.com/katoMegumi/p/14025192.html
Copyright © 2011-2022 走看看