Как получить все комбинации последовательностей строки (в Java или C ++ и т. Д.) - PullRequest
19 голосов
/ 24 октября 2009

Допустим, у меня есть строка "12345". Я должен получить все последовательности этой последовательности, такие как:

  1. -> 1 2 3 4 5
  2. -> 12 13 14 15 23 24 25 34 35 45
  3. -> 123 124 125 234 235 345
  4. -> 1234 1235 1245 1345 2345
  5. -> 12345

Обратите внимание, что я сгруппировал их по разному количеству символов, но не изменил их порядок. Мне нужен метод / функция, которая делает это.

Ответы [ 12 ]

0 голосов
/ 03 ноября 2009

упс, неправильный ответ:

Последовательности определенной длины в Python:

def subseqs(seq, length):
    for i in xrange(len(seq) - length + 1):
        yield seq[i:i+length]

Используется так:

for each in subseqs("hello", 3):
    print each

печать:

hel
ell
llo

Для генерации всех подпоследовательностей сделайте это:

for i in xrange(len("hello")):
    for each in subseqs("hello", i + 1):
        print each

печать:

h
e
l
l
o
he
el
ll
lo
hel
ell
llo
hell
ello
hello

Мик.

Теперь я вижу, вы хотели подмножества, а не подсписки.

0 голосов
/ 24 октября 2009

Ответ Адриана Плиссона показывает, как получить все подпоследовательности заданной длины в Python (для типов данных произвольной последовательности). ОП указывает, что он работает со строками и что он хочет все подпоследовательности. Таким образом, используя itertools.combinations мы определяем:

>>> from itertools import combinations
>>> def subseq_combos(inp):
...     return (''.join(s) for r in range(len(inp) + 1) for s in combinations(inp, r))
... 
>>> list(subseq_combos('12345'))
['', '1', '2', '3', '4', '5', '12', '13', '14', '15', '23', '24', '25', '34', '35', '45', '123', '124', '125', '134', '135', '145', '234', '235', '245', '345', '1234', '1235', '1245', '1345', '2345', '12345']

(Если пустая подпоследовательность должна быть опущена, используйте range(1, len(inp) + 1)).)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...