Skip to content

Commit 8470ed5

Browse files
authored
Update 1531-string-compression-ii.js
1 parent 92167c9 commit 8470ed5

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

1531-string-compression-ii.js

+35
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,38 @@ const getLengthOfOptimalCompression = function(s, k) {
2424
}
2525
return counter(0, '', 0, k)
2626
};
27+
28+
// another
29+
30+
const getLengthOfOptimalCompression = function (s, k) {
31+
const n = s.length
32+
const dp = new Array(n + 1).fill(n).map((row) => new Array(k + 1).fill(n))
33+
dp[0][0] = 0
34+
35+
for (let i = 1; i <= n; i++) {
36+
for (let j = 0; j <= k; j++) {
37+
let letterCount = 0
38+
let deletion = 0
39+
// keep s[i], compress same letters, remove different letters
40+
for (let l = i; l >= 1; l--) {
41+
if (s.charAt(l - 1) === s.charAt(i - 1)) letterCount++
42+
else deletion++
43+
// places = length needed to rep compressed letters.
44+
// 0 places for count = 1,0, 1 place = <10, 10-99 requires 2 places, 100+ requires 3
45+
let places = 0
46+
if (letterCount >= 100) places = 3
47+
else if (letterCount >= 10) places = 2
48+
else if (letterCount >= 2) places = 1
49+
if (j - deletion >= 0) {
50+
dp[i][j] = Math.min(dp[i][j], dp[l - 1][j - deletion] + 1 + places)
51+
}
52+
}
53+
// delete
54+
if (j > 0) {
55+
dp[i][j] = Math.min(dp[i][j], dp[i - 1][j - 1])
56+
}
57+
}
58+
}
59+
return dp[n][k]
60+
}
61+

0 commit comments

Comments
 (0)