题目描述
给定一个只含有‘G’,‘B’的字符串,只能交换左右相邻的字符,使得G和B分别在两侧所最小的交换次数为?
思路
双指针,如果要G在左侧,L、i指针开始指向左侧,i开始遍历遇到G就和L位置交换,L++。而实际上不交换也可以算出结果,如果B在左侧也是同样的步骤。
代码
public static int minSteps1(String s) {
int L1=0;
int L2=0;
int res1=0;
int res2=0;
char[] str=s.toCharArray();
for (int i = 0; i < str.length; i++) {
if(str[i]=='G'){
res1+=i-L1;
L1++;
}else{
res2+=i-L2;
L2++;
}
}
return Math.min(res1,res2);
}