奇怪的打印机

有台奇怪的打印机有以下两个特殊要求:
打印机每次只能打印由 同一个字符 组成的序列。
每次可以在从起始到结束的任意位置打印新字符,并且会覆盖掉原来已有的字符。
给你一个字符串 s ,你的任务是计算这个打印机打印它需要的最少打印次数。

  • 输入:s = “aaabbb”
    输出:2
    解释:首先打印 “aaa” 然后打印 “bbb”。

  • 输入:s = “aba”
    输出:2
    解释:首先打印 “aaa” 然后在第二个位置打印 “b” 覆盖掉原来的字符 ‘a’。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var strangePrinter = function(s) {
const n = s.length;
const dp = new Array(n);
for (let i = 0; i < n; i++) {
dp[i] = new Array(n).fill(0)
}

for (let i = n-1; i>=0; i--) {
dp[i][i] = 1;
for (let j = i + 1; j < n; j++) {
if (s[i] === s[j]) {
dp[i][j] = dp[i][j-1];
} else {
let min = Infinity;
for (let k = i; k < j ; k++) {
min = Math.min(min,dp[i][k]+dp[k+1][j]);
}
dp[i][j] = min;
}
}
}
return dp[0][n-1];
};