我有一个由子串组成的长字符串。任务是提取子串。子字符串由以下特征定义:
问题是定义一个算法,给定一个字符串S,将其分解为遵循上述规则的子字符串。目标是确定这样的子串的最小数量(通常,单个字符将适合该法案)。
字符串及其子串的示例:
AC3BDCAB223DADAC121BCD332221A
必须像这样分解:
AC3BD CAB223D AD AC12 1BCD33222 1A
^ C repeats
^ A repeats
^ A repeats
^ 1 repeats
^ 1 repeats
答案 0 :(得分:1)
如果我正确理解了您的问题,以下简单程序可以满足您的需求:
inString = 'AC3BDCAB223DADAC121BCD332221A'
found = []
recent = inString[0]
found.append(recent)
breaks=[-1]
for i,c in enumerate(inString[1:]):
if c == recent:
continue
if c in found:
breaks.append(i)
found = [c]
recent = c
else:
found.append(c)
recent = c
breaks.append(len(inString))
for ii in range(len(breaks)-1):
print inString[breaks[ii]+1:breaks[ii+1]+1]
对于给定的输入字符串,它产生输出:
AC3BD
CAB223D
AD
AC12
1BCD33222
1A
正如你所看到的,recent
是最后一个看到的角色:这可以让你继续“#34;如果你有重复的角色。如果您看到一个新字符,则将其添加到此块中到目前为止使用的字符串中;当你再次看到一个角色时,你知道它必须属于一个新的过程。
如果这不是您所需要的,您必须澄清您的问题。