题目
一个数组中只有两种字符'G'和’B’,
可以让所有的G都放在左侧,所有的B都放在右侧
但是只能在相邻字符之间进行交换操作,
返回至少需要交换几次
一、暴力
尝试让每一个G都跑到0位置
让2位置来到0位置,第一种选择,让3位置的G来到0位置,让6,7,8位置的G来到0位置,让每个G都来到0位置接下来,你让每个G都来到1位置,再让每个G都来到2位置,一个彻底的暴力尝试类似于全排列的一个尝试代码
二、贪心
没有任何必要后面的G需要跑到前面的G的前面
两个指针index:往右扫,不是G就往右飘
L:如果发现了放到哪儿的位置
代码
public static int minSteps1(String s) {
if (s == null || s.equals("")) {
return 0;
}
char[] str = s.toCharArray();
int step1 = 0;
int gi = 0;
for (int i = 0; i < str.length; i++) {
if (str[i] == 'G') {
step1 += i - (gi++);
}
}
return step1;
}