LeetCode题解(1531):行程长度编码压缩字符串删去指定数量字符后的最短长度(Python)
发布日期:2021-06-29 19:58:49
浏览次数:3
分类:技术文章
本文共 1368 字,大约阅读时间需要 4 分钟。
题目:(困难)
标签:字符串、动态规划、动态规划-状态表格
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
---|---|---|---|
Ans 1 (Python) | O ( S 2 × K ) O(S^2×K) O(S2×K) | O ( S × K ) O(S×K) O(S×K) | 708ms (95.24%) |
Ans 2 (Python) | |||
Ans 3 (Python) |
解法一(动态规划):
class Solution: def getLengthOfOptimalCompression(self, s: str, k: int) -> int: N = len(s) dp = [[N] * (k + 1) for _ in range(N + 1)] # 状态表格:在前i个字符中删除k个字符的最小压缩串长度 dp[0][0] = 0 dp[1][0] = 1 # 完成不删除字符的状态转移 now = 1 for i in range(2, N + 1): if s[i - 1] == s[i - 2]: now += 1 dp[i][0] = dp[i - 1][0] + (1 if now == 2 or now == 10 or now == 100 else 0) else: now = 1 dp[i][0] = dp[i - 1][0] + 1 # 状态转移 for i in range(1, N + 1): for j in range(1, min(k, i) + 1): dp[i][j] = dp[i - 1][j - 1] # 当直接删除最后一个字符时 same, diff = 0, 0 for m in range(i, 0, -1): if s[m - 1] == s[i - 1]: same += 1 length = 1 if same == 1 else (2 if same < 10 else (3 if same < 100 else 4)) dp[i][j] = min(dp[i][j], dp[m - 1][j - diff] + length) # 转移到对应位置所需删除的数量为diff,相同值的数量为same else: diff += 1 if diff > j: break return dp[-1][-1]
转载地址:https://dataartist.blog.csdn.net/article/details/108354577 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月11日 11时06分23秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C# 去掉webapi返回json所带的转义字符
2019-04-30
js比较两个String字符串找出不同,并将不同处高亮显示
2019-04-30
两种方法比较两个字符串的不同
2019-04-30
.Net C# 泛型序列化和反序列化JavaScriptSerializer
2019-04-30
C# HttpWebRequest请求远程地址获取返回消息
2019-04-30
C# HttpWebRequest向远程地址Post文件
2019-04-30
ueditor 编译出错
2019-04-30
SQLServer 导入大容量sql文件
2019-04-30
IIS和apache并存windows服务器
2019-04-30
高性能系统架构设计
2019-04-30
supersocket特征
2019-04-30
你懂什么是分布式系统吗?Redis分布式锁都不会?
2019-04-30
高性能高可用高并发技术架构的一些理解
2019-04-30
SSM(Spring+SpringMVC+MyBatis)高并发优化思路
2019-04-30
项目管理工具
2019-04-30
windows 的文件夹映射实现
2019-04-30
IIS实现反向代理
2019-04-30
js跨域原理及解决方案
2019-04-30
架构师日志
2019-04-30