题目地址:
https://leetcode.com/problems/dota2-senate/description/
给你一个只包含 ‘R’ 和 ‘D’ 的字符串 senate,表示一排参议员的顺序:
‘R’ 代表 Radiant 阵营的参议员
‘D’ 代表 Dire 阵营的参议员
回合制过程(按座位顺序循环进行):从左到右轮到某个仍具有投票权的参议员时,他可以“禁用”对方阵营中某一名仍具有投票权的参议员,使其之后无法再参与(等价于把对手阵营下一位还活跃的人淘汰)。本回合结束后,当前参议员会在下一轮继续参与(除非被别人之前禁用了)。座位顺序是循环的,也就是走到末尾又回到最前面继续。当某一阵营所有参议员都被禁用时,另一阵营获胜。让你输出最后获胜阵营的名字:
“Radiant” 表示 R 阵营胜
“Dire” 表示 D 阵营胜
用队列模拟即可。代码如下:
classSolution{public:stringpredictPartyVictory(string ss){intn=ss.size();queue<int>R,D;for(inti=0;i<n;i++)if(ss[i]=='R')R.push(i);elseD.push(i);while(R.size()&&D.size()){intr=R.front();R.pop();intd=D.front();D.pop();if(r<d)R.push(r+n);elseD.push(d+n);}returnR.empty()?"Dire":"Radiant";}};时空复杂度O ( n ) O(n)O(n)。