ad1 广告
 
收藏文章 楼主

动态规划巧解字符串压缩优化问题 - 力扣1531题深度解析

版块:SEO软文   类型:普通   作者:用意要   查看:0   回复:0   获赞:0   时间:2025-07-08 13:35:44

截图未命名.jpg 动态规划巧解字符串压缩优化问题 - 力扣1531题深度解析 动态规划 字符串 算法 力扣题解 C++ 第1张

一、问题理解

行程长度编码(Run-Length Encoding)是一种简单有效的字符串压缩方法。题目要求我们在删除最多k个字符后,使压缩后的字符串长度最短。

二、解题思路

  1. 动态规划状态定义:
    dp[i][j]表示前i个字符删除j个字符后的最小压缩长度

  2. 状态转移

  • 情况1:删除当前字符,直接继承dp[i-1][j-1]

  • 情况2:保留当前字符,向前查找相同字符序列,计算保留这些字符的压缩成本

三、关键代码解析

  1. 初始化:处理空字符串的情况

  2. 双重循环:外层遍历字符串,内层遍历可能的删除次数

  3. 压缩成本计算:根据相同字符数量计算编码长度

四、完整代码

class Solution {
public:
    int getLengthOfOptimalCompression(string s, int k) {
        int n = s.size();
        // dp[i][j]表示前i个字符删除j个字符后的最小压缩长度
        vector<vector<int>> dp(n+1, vector<int>(k+1, INT_MAX/2));
        
        // 初始化:前0个字符删除j个字符的压缩长度为0
        for(int j = 0; j <= k; ++j) {
            dp[0][j] = 0;
        }
        
        for(int i = 1; i <= n; ++i) {
            for(int j = 0; j <= min(i, k); ++j) {
                // 情况1:删除当前字符
                if(j > 0) {
                    dp[i][j] = dp[i-1][j-1];
                }
                
                // 情况2:保留当前字符
                int same = 0, diff = 0;
                // 向前查找相同字符,考虑删除不同字符的情况
                for(int m = i; m >= 1; --m) {
                    if(s[m-1] == s[i-1]) {
                        same++;
                    } else {
                        diff++;
                        if(diff > j) break;
                    }
                    
                    // 更新dp值
                    int cost = 0;
                    if(same == 1) cost = 1;
                    else if(same < 10) cost = 2;
                    else if(same < 100) cost = 3;
                    else cost = 4;
                    
                    dp[i][j] = min(dp[i][j], dp[m-1][j-diff] + cost);
                }
            }
        }
        
        return dp[n][k];
    }
};

、学习建议

  1. 先理解基础RLE算法

  2. 练习简单DP问题

  3. 逐步过渡到这类复杂DP问题

通过这道题,我们可以学习如何将复杂问题分解为子问题,并用动态规划高效解决。

转载:动态规划巧解字符串压缩优化问题 - 力扣1531题深度解析

 
ad1 广告位8,870 x auto
回复列表
默认   热门   正序   倒序

回复:动态规划巧解字符串压缩优化问题 - 力扣1531题深度解析

Powered by 免费外链论坛

©2015 - 2025 免费外链论坛

免费外链论坛 免费发布外链 发外链平台Sitemap

您的IP:216.73.216.252,2025-07-12 18:07:40,Processed in 0.02629 second(s).

备案信息:浙ICP备2024090696号

声明:本站内容为用户自主发布,不对其内容真实性负责,虽然本站会一一审核,但能力有限,如您发现违规内容,请及时联系管理员。

主页

欢迎您的浏览

QQ联系图标

自助查询

99%的问题都能找到答案

联系站长

工作时间:9:00~17:30

微信二维码

回到顶部

向上滚动到顶部

个人中心

去个人首页看看吧

转到底部

向下滚动到底部

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息