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); }