DDSA
Advertisement

664. Strange Printer

664.cs
C#
public class Solution
{
    public int StrangePrinter(string s)
    {
        int n = s.Length;
        int[][] dp = new int[n][];

        for (int i = 0; i < n; i++)
        {
            int[] row = new int[n];
            Array.Fill(row, -1);
            dp[i] = row;
        }

        return topDown(s, 0, n - 1, dp);
    }

    private int topDown(string s, int i, int j, int[][] dp)
    {
        if (i > j)
            return 0;

        if (dp[i][j] != -1)
            return dp[i][j];

        dp[i][j] = topDown(s, i + 1, j, dp) + 1;

        for (int k = i + 1; k <= j; k++)
        {
            if (s[k] == s[i])
            {
                int val = topDown(s, i, k - 1, dp) + topDown(s, k + 1, j, dp);
                dp[i][j] = Math.Min(dp[i][j], val);
            }
        }

        return dp[i][j];
    }
}
Advertisement
Was this solution helpful?