zoukankan      html  css  js  c++  java
  • 1531. 压缩字符串 II(动态规划)

    class Solution {
        public int getLengthOfOptimalCompression(String s, int k) {
            int n = s.length();
            int[][] dp = new int[n+1][k+1]; // dp[i][j]:考虑前i个字符最多删除j个的最小长度
            for(int[] d : dp) Arrays.fill(d,Integer.MAX_VALUE >> 1);
            dp[0][0] = 0;
            for(int i = 1; i <= n; i++) {
                for(int j = 0; j <= k && j <= i; j++) {
                    if(j > 0) dp[i][j] = dp[i-1][j-1];  // 情况1:删除第i个字符
                    // 情况2:保留第i个字符
                    int same = 0, diff = 0;
                    for(int f = i; f >= 1 && diff <= j; f--) { // 向前遍历与第i个字符相同的字符则考虑保留
                        if(s.charAt(f-1) == s.charAt(i-1)) {
                            dp[i][j] = Math.min(dp[i][j],dp[f-1][j-diff] + calc(++same));
                        } else {
                            diff++;
                        }
                    }
                }
            }
            return dp[n][k];
        }
    
        public int calc(int n) {
            if(n == 1) return 1;
            if(n < 10) return 2;
            if(n < 100) return 3;
            return 4;
        }
    }
  • 相关阅读:
    MATLAB accumarray
    函数rand,randn,randi
    bsxfun
    sub2ind函数
    MAX
    & 和 &&
    matlab函数int2str, num2str, str2num
    ASCII对照表
    STM32的ADC配置
    单节锂电池基本知识
  • 原文地址:https://www.cnblogs.com/yonezu/p/13535424.html
Copyright © 2011-2022 走看看