String 生成字符串的所有覆盖子字符串

String 生成字符串的所有覆盖子字符串,string,substring,sequences,String,Substring,Sequences,如何处理以下问题:给定一个字符串,生成所有可能的方法将该字符串解析为子字符串时间很重要,空间不重要。 例如,给定字符串ABCD,我需要生成: ABCD A BCD A BC D A B CD AB CD AB C D ABC D A B C D 可能是一个递归解决方案,但我不能完全让它工作。Python: def splitstring(s): result = [s] for i in range(1, len(s)): result.extend('%s %s

如何处理以下问题:给定一个字符串,生成所有可能的方法将该字符串解析为子字符串时间很重要,空间不重要。 例如,给定字符串ABCD,我需要生成:

ABCD

A BCD

A BC D

A B CD

AB CD

AB C D

ABC D

A B C D
可能是一个递归解决方案,但我不能完全让它工作。

Python:

def splitstring(s):
  result = [s]
  for i in range(1, len(s)):
    result.extend('%s %s' % (s[:i], x) for x in splitstring(s[i:]))
  return result
Python:

def splitstring(s):
  result = [s]
  for i in range(1, len(s)):
    result.extend('%s %s' % (s[:i], x) for x in splitstring(s[i:]))
  return result

Python中的另一个解决方案,没有递归:

def substrings(s):
    for k in xrange(1, len(s)+1):
        for i in xrange(len(s)-k+1):
            yield s[i:i+k]
所以

>>> print list(substrings("ABCD"))
['A', 'B', 'C', 'D', 'AB', 'BC', 'CD', 'ABC', 'BCD', 'ABCD']

Python中的另一个解决方案,没有递归:

def substrings(s):
    for k in xrange(1, len(s)+1):
        for i in xrange(len(s)-k+1):
            yield s[i:i+k]
所以

>>> print list(substrings("ABCD"))
['A', 'B', 'C', 'D', 'AB', 'BC', 'CD', 'ABC', 'BCD', 'ABCD']

谢谢,这帮了大忙。我在Perl中成功地重新实现了它,这很有帮助。我用Perl成功地重新实现了它谢谢你!对于Python3,只需将xrange替换为range即可,一切正常!。非常感谢。对于Python3,只需将xrange替换为range即可,一切正常!。