力扣 LeetCode 649. Dota2 参议院

在这里插入图片描述
在这里插入图片描述
题目看似繁琐,其实翻译一下就是,给你一个字符串,其中有字母R和字母D,从头遍历该字符串,遍历到字母R时,将在它之后最近的字母D删除(我在编程时是令它变为“K”,表示该字母删除了)(因为如果不删最近的话会导致可以让最近的字母D删除字母R),遍历到字母D时,则将在它之后最近的字母R删除,删到最后一个字母后从头开始重新遍历,直到只剩一种字母为止,设置一个变量num,当遍历到R的时候,令num++,表示R的个数,如果num>=0,则说明此时之前的数据中,R的个数不少于D,此时该R值在这次遍历中没有被删除(不会变成K),同理,遍历到D的时候,m–,如果num<=0,表示该D值在这次遍历中没有被删除(不会变成K)。通过两个标记R和D,表明该次遍历中存不存在D和R,循环遍历数组,直到标记D或者R变为false.

class Solution {
public:
    string predictPartyVictory(string senate) {
        bool R=true;
        bool D=true;
        int num=0;
        while(R&&D){
            D=false;
            R=false;
            for(int i=0;i<senate.size();i++){
                if(senate[i]=='R'){
                    if(num<0){
                        senate[i]='K';                       
                    }
                    else{ 
                        R=true;
                    }
                    num++;
                }
                if(senate[i]=='D'){
                    if(num>0){
                        senate[i]='K';
                        
                    }
                    else{ 
                        D=true;
                    }
                    num--;
                }
            }
        }
        return R?"Radiant":"Dire";

    }
};```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值