2012-12-01 111 views
1

的(排列5)(C++!我不知道我是否应该提及与否) (保持这个顺序,如果在所有可能的!)字符串去除字符的字符

说我有,而我呢,字符串ABaC。

我有一个所谓的气温向量该字符串的每个字符。

所以,我有温度[0] = A,温度[1] = B,温度[3] = A,温度[4] = C.

我想要做对是一个程序,输出该字符串的每个排列,从移除0大写字母,然后1个大写字母,然后两个大写字母,结果的话,所有3

我取出资金的原因是...你不应该集中在首都。它发生了,我需要删除所有的资本在这里,但是,让我们说ADbd,我不需要删除D.所以真的,从字符串中删除一组已知字符的算法。

所以它会输出:

ABaC酒店| BAC | AAC |阿坝州| AC | AA |巴|一个

不找效率这里或过辉煌的算法。简单而长或短而愚蠢的事情我也非常满意。

这是我正在进行的一个正在进行的项目的一部分,它将删除lambda产品(您已经很好的帮助我了)因此,这是我需要通过删除可空变量来构建新生产规则的步骤规则,一个接一个等等,并输出每个排列。

但是,你们都可以忽略这一点。把它看作是字符串。所以,非常感谢任何帮助。

谢谢你,亲切。

回答

2

我不知道你正在使用什么语言,所以我在下面提供的高级步骤。

  1. 浏览您的字符串,并创建一个集合capitalIndexes所有的大写字母存在的指示。
  2. 对于的powerset中的每个集合s,除了那些位于s索引处的字符串之外,打印出该字符串的每个字符,然后打印\n

这里唯一的复杂位生成所述幂; here是另一个提供了在C++中执行此操作的方法的答案。

+0

C++!我不知道我是否应该包含该语言,我会在标签中这样做,然后阅读您的评论。 – neojb1989

+2

C++?节哀顺变!我添加了一个可能有用的链接。 – cheeken

+0

其实,我已经在我的程序中有一部分产生了我正在摆脱的可为空的变量的能量集合:) – neojb1989

1

你没有指定任何语言,所以我把它写在伪语言:

Function(string temp, int startindex): 

output temp 
for i = startindex to temp.length-1 { 
    if temp[i] is capital { 
    temp.remove(i) 
    Function(temp.clone(), i) 
    } 
} 

您与Function(temp, 0)启动它。

注意,它给出的结果可能比你希望其他顺序。 (从你的问题不知道该命令有多少是对你很重要。)

+0

嗯,我使用了单词排列,因为我相信排列顺序是正确的吗?我不确定。 但我宁愿保持订单相同。 – neojb1989

+0

这是一个void函数吗? – neojb1989

+0

是的,'output temp'将一个项目添加到输出中,所以它可以返回void。实际上,你可以用一个队列替换递归,然后它会按你想要的顺序工作。 (这种递归算法就像是使用堆栈,而且你可能希望队列保持正确的输出顺序。) 还要注意真正的*排列*从不移除任何项目。他们只是改变项目的顺序。 –

2

在这里,你三个大写字母和8级的解决方案。这应该给你一个想法(2^3 = 8)。

如果您有n个大写字母,请遍历数字0 - > 2^n - 1。对于每个数字,您使用其二进制表示法来确定是否包含大写字母。

000 - >一个

001 - > AC

010 - >巴

011 - > BAC

+0

@ neojb1989这可以称为位掩码。 – irrelephant

+0

2^n我没有想到,那会派上用场。谢谢。 – neojb1989