leetcode 1531 壓縮字串

2022-05-15 08:27:38 字數 1062 閱讀 3940

題意

行程長度編碼 是一種常用的字串壓縮方法,它將連續的相同字元(重複 2 次或更多次)替換為字元和表示字元計數的數字(行程長度)。例如,用此方法壓縮字串 "aabccc" ,將 "aa" 替換為 "a2" ,"ccc" 替換為` "c3" 。因此壓縮後的字串變為 "a2bc3" 。

注意,本問題中,壓縮時沒有在單個字元後附加計數 '1' 。

給你乙個字串 s 和乙個整數 k 。你需要從字串 s 中刪除最多 k 個字元,以使 s 的行程長度編碼長度最小。

請你返回刪除最多 k 個字元後,s 行程長度編碼的最小長度 。

思路dp[i][j][last][concat]表示前i個字元,刪除j個,最後乙個為last,當前到最後乙個字元最長相同字元個數為concat時編碼的最小長度。

每乙個字元有刪除和連線兩種操作,刪除時狀態轉移為dp[i-1][j-1][last][concat]

連線時如果當前字元和last相等,需要考慮concat的個數,因為當concat從1變為2,從9變為10,從99變為100時,數目是增加1的

若連線時字元不同,重新跟新last和concat的數值

int dp[105][105][27][15];

const int maxn=0x3f3f3f3f;

string s;

int dfs(int idx,int k,int last,int concat)

else

ans=min(ans,dfs(idx+1,k,s[idx]-'a',1)+1);

return val=ans;

}int getlengthofoptimalcompression(string s, int k)

思路2,dp[i][j]表示前i個字元刪除j個,那麼對第i個字元有刪除和不刪除兩種;對於不刪除,我們考慮在不超過k的條件下可以走多遠
int dp[105][105];

int getlengthofoptimalcompression(string s, int k) }}

return dp[n][k];

}

leetcode 443 字串壓縮

給定一組字元,使用原地演算法將其壓縮。壓縮後的長度必須始終小於或等於原陣列長度。陣列的每個元素應該是長度為1 的字元 不是 int 整數型別 在完成原地修改輸入陣列後,返回陣列的新長度 示例 1 輸入 a a b b c c c 輸出 返回6,輸入陣列的前6個字元應該是 a 2 b 2 c 3 說明...

LeetCode 面試01 06 字串壓縮

字串壓縮。利用字元重複出現的次數,編寫一種方法,實現基本的字串壓縮功能。比如,字串aabcccccaaa會變為a2b1c5a3。若 壓縮 後的字串沒有變短,則返回原先的字串。你可以假設字串中只包含大小寫英文本母 a至z 示例1 輸入 aabcccccaaa 輸出 a2b1c5a3 示例2 輸入 ab...

LeetCode 27 字串壓縮

題目描述 難度 很簡單 字串壓縮。利用字元重複出現的次數,編寫一種方法,實現基本的字串壓縮功能。比如,字串aabcccccaaa會變為a2b1c5a3。若 壓縮 後的字串沒有變短,則返回原先的字串。你可以假設字串中只包含大小寫英文本母 a至z 示例1 輸入 aabcccccaaa 輸出 a2b1c5...