solve(left, right)
that returns the minimum number of operations needed to print the substring s[left..right]
.\n2. If dp[left][right]
is not -1, return its value as the result has already been computed.\n3. Initialize dp[left][right]
with a large value (e.g., the length of the string).\n4. Find the leftmost index j
where s[j]
differs from s[right]
.\n5. For each index i
from left
to right - 1
, if s[i]
differs from s[right]
, update dp[left][right]
with the minimum of its current value and 1 + solve(j, i) + solve(i + 1, right)
.\n6. If no such j
is found (the substring consists of the same character), set dp[left][right]
to 0.\n7. Return dp[left][right]
.\n8. The final answer is solve(0, n - 1) + 1
, where n
is the length of the string.