class Solution {
    public int minCost(String colors, int[] neededTime) {
        int[] dp = new int[colors.length() + 1];
        Arrays.fill(dp, 0);
        char previousColor = 0;
        int previousTime = 0;

        for (int i = 1; i <= colors.length(); ++i) {
            if (colors.charAt(i - 1) == previousColor) {
                dp[i] = dp[i - 1] + Math.min(previousTime, neededTime[i - 1]);
                previousTime = Math.max(previousTime, neededTime[i - 1]);
            } else {
                dp[i] = dp[i - 1];
                previousColor = colors.charAt(i - 1);
                previousTime = neededTime[i - 1];
            }
        }

        return dp[colors.length()];
    }
}