我正在尝试解决USACO问题,称为“断项链”。在这个问题中,您将得到一个字符串,并且找到了最大可能的连续色珠。
我试图将我的字符串分成两部分,每个部分都有自己的颜色。“ w”字符可以是红色或蓝色,但必须与红色或蓝色字符分开。它不能独立存在。
例如:
arr = []
string = 'rwbwrr'
#do something
arr = ["rw","bw","rr"]
我试过在for循环中创建一个while循环,但这没有用。
new_necklace = "bbrwrbrbrrbrbrwrwwrbwrwrrbwww"
arr = []
count = 0
for i in range(len(new_necklace)):
count = i
if new_necklace[i] == 'r' or new_necklace[i] == 'b':
while new_necklace[count+1] == 'w':
count += 1
arr.append(new_necklace[i:count])
尝试此方法时出现索引超出范围错误,并且它弄乱了输出。数组应等于[“ bb”,“ rwr”,“ b”,“ r” ....]
编辑:我对我的代码进行了一些修改,我最终做到了这一点。
arr = []
for i in range(len(new_necklace)):
count = i+1
if new_necklace[i] == 'w':
continue
if new_necklace[i] == 'r' or new_necklace[i] == 'b':
while count < len(new_necklace):
if new_necklace[count] == 'w' or new_necklace[count] == new_necklace[i]:
count += 1
else:
break
arr.append(new_necklace[i:count])
但是,['bb', 'b', 'rwr', 'r', 'b', 'r', 'b', 'rr', 'r', 'b', 'r', 'b', 'rwrwwr', 'rwwr', 'r', 'bw', 'rwrr', 'rr', 'r', 'bwww']
即使new_necklace为,这也会在数组输出时引起一个新问题"bbrwrbrbrrbrbrwrwwrbwrwrrbwww"
。它似乎两次追加相同的子集。
使用re
模块根据规则分割字符串:
s = 'bbrwrbrbrrbrbrwrwwrbwrwrrbwww'
import re
print([i[0] for i in re.findall(r'(([rb])(?:\2|w)*)', s)])
印刷品:
['bb', 'rwr', 'b', 'r', 'b', 'rr', 'b', 'r', 'b', 'rwrwwr', 'bw', 'rwrr', 'bwww']
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句