Любой способ найти комбинацию слова? - PullRequest
2 голосов
/ 02 марта 2011

Я хочу найти все возможные комбинации данного слова.Например, скажите, что данное слово «тогда», тогда мне нужно «т, ч, е, тх ...».Я должен найти это в Groovy, есть какой-нибудь метод?Или, пожалуйста, скажите мне схему алгоритма.

Ответы [ 2 ]

6 голосов
/ 02 марта 2011

Если вам также нужны подмножества, вы можете сделать что-то вроде этого:

("word" as List).subsequences()*.permutations().inject( [] ) { list, set ->
  list.addAll( set )
  list
}*.join().sort { it.length() }

, который дает следующий вывод:

[o, d, r, w, dw, wd, do, od, dr, rd, wr, rw, ow, wo, ro или owd, wod, wdo, odw, dwo, dow, orw, owr, wor, wro, рво, ряд, дор, орд, одр, рдо, род, Дро, WDR, RWD, DRW, RDW, Wrd, DWR, wrdo, orwd, wrod, wodr, ordw, wdor, rwod, wdro, слово, owdr, rdow, дроу, drwo, rdwo, odwr, dorw, odrw, dowr, dwro, rodw, dwor, owrd, rowd, rwdo]

edit : изменил set.each на list.addAll, так как он должен быть быстрее (и читать намного проще)

3 голосов
/ 02 марта 2011

("word" as List).permutations()*.join() сгенерирует все перестановки, кроме подмножеств.Перестановки каждого возможного подмножества могут использовать this .

Обновление: После прочтения ответа Тима я могу придумать следующее:

("word" as List).subsequences()*.permutations().collect{ it*.join() }.flatten().sort{ it.length() }(может обойтись без .sort{...})

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