你如何做到以下幾點:給定一個字符串,生成所有可能的方法來將該字符串解析爲子字符串(時間很重要,空間不要在意)。 例如,給定的字符串ABCD,我需要生成:生成一個字符串的所有覆蓋子字符串
ABCD
A BCD
A BC D
A B CD
AB CD
AB C D
ABC D
A B C D
可能是一個遞歸解決方案,但我不能完全得到它的工作。
你如何做到以下幾點:給定一個字符串,生成所有可能的方法來將該字符串解析爲子字符串(時間很重要,空間不要在意)。 例如,給定的字符串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 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']
+1這個算法有巨大的加速 – kmonsoor 2014-02-05 05:17:52
謝謝!對於Python3,只需將xrange替換爲範圍,一切正常! – 2016-06-06 08:55:10
感謝,這幫助了很多。我在Perl中成功重新實現了它 – Ascari 2010-08-27 21:55:36