题目看似繁琐,其实翻译一下就是,给你一个字符串,其中有字母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";
}
};```