String 生成字符串的所有覆盖子字符串
如何处理以下问题:给定一个字符串,生成所有可能的方法将该字符串解析为子字符串时间很重要,空间不重要。 例如,给定字符串ABCD,我需要生成: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
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即可,一切正常!。