题目
解答
时间复杂度O(n)
思路
贪心算法,假设G在左B在右,将第一个G放在第一个位置,算需要几步,将第二个G放在第二个位置,算需要几步,以此类推。
代码
public class Solution {
public static int minSteps(String s) {
if (null == s || s.length() == 0) {
return 0;
}
char[] chars = s.toCharArray();
int gLast = 0;
int gRes = 0;
for (int i = 0; i < chars.length; i++) {
if (chars[i] == 'G') {
gRes += i - gLast;
gLast++;
}
}
int bLast = 0;
int bRes = 0;
for (int i = 0; i < chars.length; i++) {
if (chars[i] == 'B') {
bRes += i - bLast;
bLast++;
}
}
return Math.min(gRes, bRes);
}
}