664. Strange Printer
https://leetcode.com/problems/strange-printer/description/
/*
* @lc app=leetcode id=664 lang=cpp
*
* [664] Strange Printer
*/
// @lc code=start
class Solution {
public:
int strangePrinter(string s) {
const int N = s.size();
if (N == 0) return 0;
vector<vector<int>> dp(N + 1, vector<int>(N + 1, 0));
for (int i = 0; i <= N; ++i) dp[i][i] = 1;
for (int i = N; i > 0; --i) {
for (int j = i + 1; j <= N; ++j) {
dp[i][j] = dp[i][j - 1] + 1;
for (int k = i; k < j; ++k) {
if (s[k - 1] == s[j - 1]) {
dp[i][j] = min(dp[i][j], dp[i][k - 1] + dp[k][j - 1]);
}
}
}
}
return dp[1][N];
// return dfs(s, dp, 0, N - 1);
}
int dfs(string &s, vector<vector<int>> &dp, int i, int j) {
if (j < i) return 0;
if (dp[i][j] != INT_MAX) return dp[i][j];
dp[i][j] = dfs(s, dp, i, j - 1) + 1;
for (int k = i; k < j; ++k) {
if (s[k] == s[j]) {
dp[i][j] = min(dp[i][j], dfs(s, dp, i, k - 1) + dfs(s, dp, k, j - 1));
}
}
return dp[i][j];
}
};
// @lc code=end
Last updated