LeetCode 649. Dota2 参议院

 

思路:

遍历字符串 找到当前参议员后面的第一个对手 并且剔除该对手 直到最后字符串中只剩下同一个阵营的字母

代码:

def predictPartyVictory(self, senate):
        s=senate
        i=0
        n=len(s)
        while i<n:
            #当前是D队的情况
            if s[i]=='D':
                #如果还剩对方的人 剔除对方的第一个选手
                if 'R' in s:
                    j=i #用j记录当前选手i的位置
                    #找到当前选手后面的第一个对手
                    while j<n and s[j]!='R':
                        j+=1
                    if j==n:
                        j=0
                        while j<i and s[j]!='R':
                            j+=1
                    #剔除排在当前选手后的第一个对手
                    if j==n:
                        s = s[:j]
                    else:
                        s = s[:j] + s[j + 1:]
                #如果已经没有对手了 本队胜利
                else:
                    return "Dire"
            
            #当前是R队的情况
            elif s[i]=='R':
                if 'D' in s:
                    j = i
                    while j<n and s[j]!='D':
                        j+=1
                    if j==len(s):
                        j=0
                        while j<i and s[j]!='D':
                            j+=1
                    if j == n:
                        s = s[:j]
                    else:
                        s = s[:j] + s[j + 1:]
                else:
                    return "Radiant"
            n -= 1
            if i==n:
                i=0
            else:
                i=(i+1)%n
            if n==1:
                if s == 'D':
                    return "Dire"
                elif s == 'R':
                    return "Radiant"

易错点:

关于 i 怎么自增 要分情况讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值