代码块识别算法

时间:2015-03-31 13:52:28

标签: python algorithm matlab decode

我有一个由子串组成的长字符串。任务是提取子串。子字符串由以下特征定义:

  1. 组成字符串
  2. 的字符集(字母,数字)有限
  3. 在子字符串中,字符只能在自身旁边重复
  4. 子字符串长度未知
  5. 问题是定义一个算法,给定一个字符串S,将其分解为遵循上述规则的子字符串。目标是确定这样的子串的最小数量(通常,单个字符将适合该法案)。

    字符串及其子串的示例:

    AC3BDCAB223DADAC121BCD332221A
    

    必须像这样分解:

    AC3BD CAB223D AD AC12 1BCD33222 1A
          ^ C repeats
                  ^ A repeats
                     ^ A repeats
                           ^ 1 repeats
                                    ^ 1 repeats
    

1 个答案:

答案 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;如果你有重复的角色。如果您看到一个新字符,则将其添加到此块中到目前为止使用的字符串中;当你再次看到一个角色时,你知道它必须属于一个新的过程。

如果这不是您所需要的,您必须澄清您的问题。