每天一道算法題8

【預處理數(shù)組-RRRGGG】
有一些排成一行的正方形,每個正方形已經(jīng)被染成紅色或者綠色,現(xiàn)在可以選擇任意一個正方形然后用這兩種顏色的任意一種進染色。這個正方形的顏色將會被覆蓋,目標是在完成染色之后,每個紅色R都比每個綠色G距離最左側(cè)近。返回最少需要涂染幾個正方形。
如樣例所示,s = RGRGR, 涂染之后變成RRRGG滿足要求了。涂染的個數(shù)為2. 沒有比這更好的涂染方案了。

解答:
這道題的意思就是最少涂染幾個,可以讓左邊的都是R,右邊的都是G。可以這么想,分別從0開始遍歷,以第i個為分割點,則右邊有幾個R,左邊有幾個G需要涂染滿足條件。則兩個加起來最小的值就是答案。所以可以預處理為2個一維數(shù)組,R[], G[], R[] 表示每個位置右邊總共有幾個R,G[] 表示每個位置左邊總共有幾個G。

public class ColorDraw {
    public static int colorDraw(String s) {
        if (s == null || s.length < 1) {
            return 0;
        }

        char[] str = s.toCharArray();
        int N = str.length;
        int[] right = new int[N];
        right[N - 1] = str[N - 1] == 'R' ?  1 : 0;

        for (int i = N - 2; i >= 0; i--) {
            right[i] = str[i+1] + (str[i] == 'R' ?  1: 0);
        }

        int ans = right[0];
        int left = 0;
        for (int i = 0; i < N - 1; i++) {
            left += str[i] == 'G' ? 1:0;
            ans = Math.min(ans, left + right[i+1]);
        }

        ans = Math.min(ans, left + (str[N - 1] == 'G‘ ? 1:0));
        return ans; 
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容