此题想到借助两个队列:r_deque记录红帮当前可行动成员的行动次序,d_queue记录黑帮当前可行动成员的行动次序。当两队列均不为空时,获取两队列的队首,若r_deque队首小于d_queue队首,说明当前红帮队头在黑帮队头之前,红帮队头可使黑帮队头出队,同时红帮队头出队后重新入队;若r_deque队首大于d_queue队首,则反之。最后两队列中有一队列为空时,胜负已定,先为空的队列出局。

#include <queue>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 求出最终获胜帮派的名称
     * @param s string字符串 
     * @return string字符串
     */
    string predictVictory(string s) {
        queue<int> r_queue,d_queue;
        for(int i=0;i<s.size();i++){
            if(s[i]=='R') r_queue.push(i);
            else d_queue.push(i);
        }
        while(!r_queue.empty() && !d_queue.empty()){
            int r_index=r_queue.front();
            r_queue.pop();
            int d_index=d_queue.front();
            d_queue.pop();
            int n=r_queue.size()+d_queue.size()+2;
            if(r_index<d_index) r_queue.push(r_index+n);
            else d_queue.push(d_index+n);
        }
        return (r_queue.empty())?"Dark":"Red";
    }
};