此题想到借助两个队列: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";
}
};



京公网安备 11010502036488号