红和绿
题目描述
牛牛有一些排成一行的正方形。每个正方形已经被染成红色或者绿色。牛牛现在可以选择任意一个正方形然后用这两种颜色的任意一种进行染色,这个正方形的颜色将会被覆盖。牛牛的目标是在完成染色之后,每个红色R都比每个绿色G距离最左侧近。牛牛想知道他最少需要涂染几个正方形。
如样例所示: s = RGRGR
我们涂染之后变成RRRGG满足要求了,涂染的个数为2,没有比这个更好的涂染方案。
如样例所示: s = RGRGR
我们涂染之后变成RRRGG满足要求了,涂染的个数为2,没有比这个更好的涂染方案。
输入描述:
输入包括一个字符串s,字符串s长度length(1 ≤ length ≤ 50),其中只包括'R'或者'G',分别表示红色和绿色。
输出描述:
输出一个整数,表示牛牛最少需要涂染的正方形数量
示例1
输出
复制2
解题思路:将每一个都看成是分界点,在这个点的左边如果不是红色的话就涂成红色,同理如果这个点和这个点的右边不是绿色的话就涂成绿色的,当遍历完字符串的时候就可以找到所有情况最少的涂色方案了
源代码如下:
#include<iostream> #include<string> #include<algorithm> using namespace std; int main() { string str; cin >> str; int min_num=str.size(); for (int i = 0; i <str.size(); ++i) //相当于把所以满足条件的字符串列举出来,然后再和str比较, //看这种情况需要涂色的个数 { int count=0; for (int j = 0; j<str.size(); ++j) { if (j<i)//这里如果写成j<=i,下面测试数据无法通过哦, //相当于没考虑全是G的情况 { if (str[j] != 'R') count++; } else { if (str[j] != 'G') count++; } } min_num=min(min_num,count); } cout<<min_num<<endl; return 0; } //GGGGRRR
不一样的烟火