找到单词组合的任何方法?

时间:2011-03-02 12:24:18

标签: groovy

我想找到给定单词的所有可能组合。比如说,给定的单词是“the”然后我需要“t,h,e,teh ......”。我必须在groovy中找到这个,有什么方法吗?或者请告诉我算法的大纲。

2 个答案:

答案 0 :(得分:6)

如果你也需要子集,你可以这样做:

("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,   rwo,row,dor,ord,odr,rdo,rod,   dro,wdr,rwd,drw,rdw,wrd,dwr,   wrdo,orwd,wrod,wodr,ordw,wdor,   rwod,wdro,word,owdr,rdow,卓尔,   drwo,rdwo,odwr,dorw,odrw,dowr,   dwro,rodw,dwor,owrd,rowd,rwdo]

修改:将set.each更改为list.addAll,因为它应该更快(并且阅读起来更容易)

答案 1 :(得分:3)

("word" as List).permutations()*.join()将生成所有排列,不包括子集。每个可能子集的排列可以使用this

更新阅读Tim的回答后,我可以想出这个:

("word" as List).subsequences()*.permutations().collect{ it*.join() }.flatten().sort{ it.length() }(可能没有.sort{...}