- 使用两个队列分别存储 R 和 D 阵营参议员的原始位置(索引)。
- 每一轮,从两个队列中各取一个队首元素(即当前轮次最先行动的两位参议员,因为队列按索引从小到大存储)。
- 比较两个索引:如果 R 的索引 < D 的索引,说明 R 先行动,他可以禁止掉这名 D 参议员(并从 D 队列中移除该元素),然后将这个 R 参议员加上 n(字符串长度)后重新放入 R 队列,表示他进入下一轮继续投票,且保证他相对于下一轮的新成员的顺序仍然正确。如果 D 的索引 < R 的索引,则类似处理,将 D 参议员加上 n 后重新入队,而 R 被移除。
- 当其中一方队列为空时,另一方获胜。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 求出最终获胜帮派的名称
* @param s string字符串
* @return string字符串
*/
string predictVictory(string s) {
queue<int> qR,qD;
for(int i=0;i<s.size();++i){
s[i]=='R'?qR.push(i):qD.push(i);
}
while(!qR.empty() && !qD.empty()){
int r=qR.front();qR.pop();
int d=qD.front();qD.pop();
r<d?qR.push(r+s.size()):qD.push(d+s.size());
}
return qR.empty()?"Dark":"Red";
}
};