我正在尝试解决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/

10-10 21:23
查看更多