2010-08-26 5 views
1

Как вы: задаете строку, генерируете все возможные способы синтаксического анализа этой строки в подстроках (время важно, космос не заботится). Например, если строка ABCD, мне нужно создать:Создание всех подстрок покрытия строки

ABCD 

A BCD 

A BC D 

A B CD 

AB CD 

AB C D 

ABC D 

A B C D 

Возможно рекурсивное решение, но я совсем не могу получить его на работу.

ответ

3

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 
+0

спасибо, это помогло. Я повторно реализовал его в Perl успешно – Ascari

4

Другое решение в 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'] 
+0

+1 этот алгоритм имеет огромное ускорение – kmonsoor

+0

Спасибо! Для Python3 просто замените xrange на диапазон, и все работает !. –

Смежные вопросы