比如:
输入:“DRRDRDRDRDDRDRDR”
需要从头遍历,中间会删除,然后没有达到要求又会继续从头遍历。
这种题就比较适合使用队列。
解题代码如下:
public static String predictPartyVictory(String senate) {
int len = senate.length();
Queue<Integer> queueR = new LinkedList<>();
Queue<Integer> queueD = new LinkedList<>();
for (int i = 0; i < len; i++){
if (senate.charAt(i) == 'R'){
queueR.offer(i);
}else {
queueD.offer(i);
}
}
while (!queueR.isEmpty() && !queueD.isEmpty()){
int R = queueR.poll();
int D = queueD.poll();
if (R > D){
queueD.offer(D + len);
}else {
queueR.offer(R + len);
}
}
if (queueD.isEmpty()){
return "Radiant";
}
return "Dire";
}
总的思想就是先遍历一遍字符串,然后用两个队列分别存 ‘D’ 和 ‘R’ 的数组下标,表示其优先级。然后开始遍历队列,两个队列分别出队队首元素,然后比较大小,小的说明靠前,优先级更高。然后小的那个坐标加上字符串的初始长度,又插入其队列。大的就永久出队。