1class Solution {2public:3int dp[101][101];4int solve(string s, int i, int j) {5if (i > j) return 0;6if (dp[i][j] != -1) return dp[i][j];7int ans = 0;8while (i < j && s[i + 1] == s[i]) i++;9while (i < j && s[j] == s[j - 1]) {10j--;11}12ans = 1 + solve(s, i + 1, j);13for (int k = i + 1; k <= j; k++) {14if (s[k] == s[i]) {15int cnt = solve(s, i + 1, k - 1) + solve(s, k, j);16ans = min(ans, cnt);17}18}19return dp[i][j] = ans;20}21int strangePrinter(string s) {22memset(dp, -1, sizeof(dp));23return solve(s, 0, s.size() - 1);24}25};26// if you like the solution plz upvote.