如何在条形码中递归查找数字或'xx'对(python)

时间:2014-05-04 11:15:03

标签: python recursion

我正在使用python。 我遇到这个递归问题的麻烦,我试图找到字符串中有多少对字符相同。例如,'xx'将返回1,'xxx'也将返回1,因为不允许对重叠。 'aabbb'将返回2.

我完全陷入困境。我想把这个词分成长度为2个字符串并通过字符串递归,但是像'aaa'这样的情况会导致错误的输出。

感谢。

3 个答案:

答案 0 :(得分:2)

不确定为什么要递归执行此操作。如果您希望避免正则表达式,您仍然可以从左到右扫描字符串。例如,使用itertools.groupby

>>> from itertools import groupby
>>> s = 'aabbb'
>>> sum(sum(1 for i in g)//2 for k,g in groupby(s))
2
>>> s = 'yyourr ssstringg'
>>> sum(sum(1 for i in g)//2 for k,g in groupby(s))
4

sum(1 for i in g)用于查找组的长度。如果群组不是很长,您可以使用len(list(g))代替

答案 1 :(得分:0)

您可以使用正则表达式:

import re

s = 'yyourr ssstringg'
print len(re.findall(r'(\w)\1', s))

[OUTPUT]
4

这也解决了你的“重叠 - 不允许”问题,正如你在上面的例子中看到的那样,它打印4而不是5。

对于递归方法,您可以这样做:

st = 'yyourr ssstringg'

def get_double(s):
    if len(s) < 2:
        return 0
    else:
        for i,k in enumerate(s):
            if k==s[i+1]:
                return 1 + get_double(s[i+2:])

>>> print get_double(st)
4

没有for循环:

st = 'yyourr sstringg'

def get_double(s):
    if len(s) < 2:
        return 0
    elif s[0]==s[1]:
        return 1 + get_double(s[2:])
    else:
        return 0 + get_double(s[1:])

>>> print get_double(st)
4

答案 2 :(得分:0)

我会用2来评估它。

例如"sskkkj"将被视为两组两个char字符串:

"ss", "kk", "kj" # from 0 index
"sk", "kk"  # offset by 1 

同时查看这两个集合,如果其中一个有一对,则只添加一个。