Re: [闲聊] 每日LeetCode

楼主: Rushia (みけねこ的鼻屎)   2023-12-28 22:57:35
1531. String Compression II
https://leetcode.com/problems/string-compression-ii/description
给你一个字串s 和一个整数 k,字串压缩为把字串相邻的字符压缩成字符和数量
,例如: a -> a bb -> b2 ccc -> c3,我们可以从 s 里面删除 k 个字符,求
出压缩后的字串最小长度是多少。
思路:
1.很明显的 DP 题,状态转移方程式是 DP(n, m) 表示长度为 n 的字串可以删除
m 个字符可以得到的最大长度,初始化为 s 的字串长。
2.困难点是状态转移方程的推导,可分成两个 CASE:
Case 1:
如果删除次数剩余大于0,且我们不压缩当前字串(删除当前字串),那么长度就会是
次数减一且长度减一的最小压缩长度 = DP(n - 1, m - 1)。
Case 2:
或者我们可以从当前字符往前压缩,假设当前位置为 i 且在 i 之前的不同字符数量少
于等于 k,那么我们就可以把所有不同的字符删除得到一个压缩串,例如:
aababaa 有5个a两个b,如果k大于2就可以删掉所有不为a的字符得到一个 a5。
假定取出压缩后的字串长度函数是 compress,因为最佳解可能是很多种压缩方式的组
合,所以我们要遍历所有的合法压缩方式:
MIN(
compress(a) + "aababa"的最佳长度,
compress(aa) + "aabab"的最佳长度,
compress(baa) + "aaba"的最佳长度,
...,
compress(aababaa)
)
这两个Case取最小值就是当前位置可得的最佳长度,做到dp[n][k] 即可。
Java Code:
作者: JIWP (JIWP)   2023-12-28 23:00:00
大师
作者: NTUEE2CS (EE转CS)   2023-12-28 23:01:00
大师
作者: Che31128 (justjoke)   2023-12-28 23:02:00
大师
作者: CP3isgood (3345678)   2023-12-28 23:04:00
大师
作者: oin1104 (是oin的说)   2023-12-28 23:11:00
今天这题难到靠北 干

Links booklink

Contact Us: admin [ a t ] ucptt.com