我正在尝试解决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])
但是,这会导致一个新问题,因为即使new_necklace是
['bb', 'b', 'rwr', 'r', 'b', 'r', 'b', 'rr', 'r', 'b', 'r', 'b', 'rwrwwr', 'rwwr', 'r', 'bw', 'rwrr', 'rr', 'r', 'bwww']
,数组也会输出"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']
关于python - 如何在给定特定规则集的情况下拆分字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57257347/