无法解决此字符串问题

时间:2016-09-04 22:03:33

标签: string python-3.x

我们会得到一个包含2个字符的字符串 - WB。我们需要知道在这样一个字符串中可以打破多少W(Walls)。在最大值时,单个B可以打破4 W。

以下是我的相同代码:

test_cases=int(input())
wallcount1=0

while(test_cases>0):
    bombs=list(input())

    for i in range(0,len(bombs)):
        if bombs[i]=='B':
            if bombs[i+1]=='W':
                wallcount1=wallcount1+1
                bombs[i+1]='0'
           if bombs[i+2]=='W':
               wallcount1=wallcount1+1
               bombs[i+2]='0'

    rever=bombs[::-1]

    for value in range(0,len(rever)):
        if bombs[value]=='B':
            if bombs[value+1]=='W':
                wallcount1=wallcount1+1
                bombs[value+1]='0'
            if bombs[value+2]=="W":
                wallcount1=wallcount1+1
                bombs[value+2]='0'

    test_cases=test_cases-1

    print(wallcount1)

示例输入和输出如下:

  

3

     

WBW

     

WWBWWBW

     

BWWWBWBWW

输出 -

  

2

     

5

     

6

1 个答案:

答案 0 :(得分:1)

我在您的代码中看到的两个重要问题是:您不会在循环中重新初始化wallcount1,以便一个测试影响下一个;您的索引if bombs[i+2]=='W':可以超出数据的末尾并导致索引错误。我们来处理这两个问题:

重新初始化墙数很容易,将其声明移入循环中。索引检查可以以各种方式完成,例如,检查您要使用的索引(例如i + 2)与数据的长度,以确保您不会超出范围。但是,懒惰的方法是将代码包装在try子句中,让它超出范围,捕获并忽略该测试结果:

test_cases = int(input())

for j in range(test_cases):

    wall_count = 0

    characters = list(input())

    for i in range(len(characters)):
        if characters[i] != 'B':
            continue

        try:
            if characters[i + 1] == 'W':
                wall_count += 1
                characters[i + 1] = '0'

            if characters[i + 2] == 'W':
                wall_count += 1
                characters[i + 2] = '0'
        except IndexError:
            pass

    characters = characters[::-1]

    for i in range(len(characters)):
        if characters[i] != 'B':
            continue

        try:
            if characters[i + 1] == 'W':
                wall_count += 1
                characters[i + 1] = '0'

            if characters[i + 2] == 'W':
                wall_count += 1
                characters[i + 2] = '0'
        except IndexError:
            pass

    print(wall_count)

请注意,我们可以在try子句中加倍测试,因为如果i + 1测试导致异常,则尝试i + 2测试没有意义。