Red And Green

#include <stdio.h>
#include <string.h>

#define LENGTH 50

/*
 * 1.字符序列中有一个字符肯定是分界点,它的左边全为红色,右边全为绿色
 * 2.因此  该点的左边的绿色要翻转为红色  该点右边的红色要翻转成绿色
 * 3.统计每个点需要翻转的次数  从中找出最小的次数即为答案
 * */

int main() {
    char brick[LENGTH];
    int len;
    scanf("%s", brick);
    len = strlen(brick);
    int leftGreen[LENGTH] = {0};
    int rigthRed[LENGTH] = {0};

    for (int i = 1; i < len; ++i) {
        leftGreen[i] = leftGreen[i - 1] + (brick[i - 1] == 'G' ? 1 : 0);
    }
    for (int j = len - 2; j >= 0; --j) {
        rigthRed[j] = rigthRed[j + 1] + (brick[j + 1] == 'R' ? 1 : 0);
    }
    int res = len;
    for (int k = 0; k < len; ++k) {
        res = (res > (leftGreen[k] + rigthRed[k]) ? (leftGreen[k] + rigthRed[k]) : res);
    }

    printf("%d",res);
}
原文地址:https://www.cnblogs.com/ustc-anmin/p/11662689.html