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