找到一串字母的所有可能变体

时间:2011-11-01 21:30:36

标签: string combinations combinatorics

这里的Newb程序员,我最熟悉Python,但也学习C和Java,所以3中的任何一个都没问题。
我所拥有的是一串字母,比如说:

  

ABXDEYGH

但是说,

  

X可以是M和N.   Y可以是P和Q.

在这个例子中,我想基本上打印这串字母的所有可能变体 喜欢:

  

ABMDEPGH
  ABNDEPGH
  ABMDEQGH
  ABNDEQGH

任何帮助将不胜感激。提前致谢

2 个答案:

答案 0 :(得分:2)

这归结为一个简单的排列问题。你关心的是文本中可以改变的部分;变量。其余部分可以忽略,直到您想要显示它。

因此,您的问题可以更简单地说明:集合X中的1个项目和集合Y中的另一个项目的所有可能排列是什么?这称为交叉产品,有时也简称为product

这是一个可能的Python解决方案:

import itertools

x = set(['M', 'N'])
y = set(['P', 'Q'])

for items in itertools.product(x, y)
    print 'AB{0}DE{1}GH'.format(*items)

请注意,print ''.format()命令使用描述为here的“解包参数”表示法。

答案 1 :(得分:1)

为什么不写两个循环。一个用X替换所有可能的字符,用Y替换一个。

foreach(char c in charSet1){
   // replaces X
   foreach(char ch in charSet2){
     // replace Y 
   }

}