我们会得到一个包含2个字符的字符串 - W
和B
。我们需要知道在这样一个字符串中可以打破多少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
答案 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
测试没有意义。