牛牛有一些排成一行的正方形。每个正方形已经被染成红色或者绿色。牛牛现在可以选择任意一个正方形然后用这两种颜色的任意一种进行染色,这个正方形的颜色将会被覆盖。牛牛的目标是在完成染色之后,每个红色R都比每个绿色G距离最左侧近。牛牛想知道他最少需要涂染几个正方形。
如样例所示: s = RGRGR
我们涂染之后变成RRRGG满足要求了,涂染的个数为2,没有比这个更好的涂染方案。
输入描述:
输入包括一个字符串s,字符串s长度length(1 ≤ length ≤ 50),其中只包括’R’或者’G’,分别表示红色和绿色。
输出描述:
输出一个整数,表示牛牛最少需要涂染的正方形数量
输入例子1:
RGRGR
输出例子1:
2
思路:双指针法,定义两个指针分别指向最低、最高位向中间靠,如果左指针为G、右指针为R则交换,否则不变。
public class ColorNum{
public static int colorNum(String s){
int lo=0,hi=s.length()-1,num=0;
char[] cArr = s.toCharArray();
int i=0,j=0;
while(lo<hi){
if(lo<hi && s.charAt(lo)=='G')
{
i=lo;
num++;
}
if(lo<hi && s.charAt(hi)=='R')
{
j=hi;
num++;
}
char tmp=' ';
tmp=cArr[i];
cArr[i]=cArr[j];
cArr[j]=tmp;
lo++;
hi--;
}
//如果要涂颜料,则至少涂2个
if(num%2==0)
return num;
else return 0;
}
public static void main(String[] args) {
String s="RGRGR";
int n=colorNum(s);
//输出2
System.out.println(n);
}
}