似乎并不需要计数器的,但我感觉带上计数器更容易理解一点

核心思想:双序列分别储存红黑帮的序列,然后靠前的人先弹劾,谁先把对面全弹了谁先赢;

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 求出最终获胜帮派的名称
     * @param s string字符串 
     * @return string字符串
     */
    string predictVictory(string s) {
        // write code here

        int n = s.size();
        //储存各帮派的索引
        queue<int> Rperson; 
        queue<int> Dperson;
        int red_count = 0; //红帮计数器
        int dark_count = 0;//黑帮计数器
        for (int i = 1;i <= n; i++)
        {
            if (s[i-1] == 'R')
            {
                Rperson.push(i);
                red_count++;
            }
            else
            {
                Dperson.push(i);
                dark_count++;
            }
        }

        //开始投票
        while (!Rperson.empty() && !Dperson.empty())
        {
            int Rperson_idx = Rperson.front();//红帮当前位置
            int Dperson_idx = Dperson.front();//黑帮当前位置
            if(Rperson_idx < Dperson_idx)//红帮先手
            {
                Dperson.pop();//黑帮首位遗憾离场
                Rperson.pop();
                Rperson.push(Rperson_idx + n);
                dark_count--; //黑帮out一位
            }
            else //黑帮先手
            {
                Rperson.pop();//红帮首位遗憾离场
                Dperson.pop();
                Dperson.push(Dperson_idx + n);
                red_count--; //红帮out一位
            }
        }
        if (red_count == 0) //红帮全员离场
        {
            return "Dark"; //黑帮当选
        }
        else //黑帮全员out
        {
            return "Red"; //红帮胜利
        }
    }
};