(排列?)通过逐字符删除字符串
(Permutation?) of strings by removal of character by character
(C++!我不知道是否应该提到它)(尽可能保持订单!)
假设我有,我有,字符串ABaC。
我把字符串中的每个字符都放在一个名为temp.的向量中
所以我有temp[0]=A,temp[1]=B,temp[3]=A,temp[4]=C。
我想做的是正确的一个程序,它输出该字符串的每个排列,这是从删除0个大写字母,然后删除1个大写字母、然后删除两个大写字母和全部3得到的。
我去掉大写字母的原因是…你不应该把重点放在大写字母上。碰巧我需要删除所有的大写字母,但是,比如说ADbd,我不需要删除D。所以,实际上,一个从字符串中删除一组已知字符的算法。
所以它会输出:
ABaC|BaC|AaC|ABa|aC|Aa|Ba|
这里不是在寻找效率,也不是在寻找过于出色的算法。一些简单而长或短而愚蠢的事情我也非常满意。
这是我正在进行的一个项目的一部分,该项目删除lambda产生(你们这些好人已经帮过我了)。因此,这是我需要通过从规则中逐个删除可为null的变量来构建新的产生规则的步骤,依此类推,并输出每个排列。
但是,你们可以忽略这一点。把它想象成一根绳子。因此,我们非常感谢您的帮助。
谢谢。
我不确定您使用的是什么语言,所以我提供了以下高级步骤。
- 遍历字符串,创建一个包含所有大写字母的标记的集合
capitalIndexes
- 对于
capitalIndexes
的幂集中的每个集合s
,打印出字符串中除位于s
中索引处的字符外的每个字符,然后打印n
这里唯一复杂的部分是生成功率集;这里有另一个答案,它提供了在C++中实现这一点的方法。
这里有三个大写字母和8个解决方案。这应该会给你一个想法(2^3=8)。
如果你有n个大写字母,循环通过数字0->2^n-1。对于每个数字,您可以使用其二进制表示来确定是否包含大写字母。
000->
001->aC
010->Ba
011->BaC
等等。
您没有指定任何语言,所以我用伪语言编写:
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)
开始。
请注意,它给出的结果可能与您想要的顺序不同。(从你的问题中不确定订单对你有多重要。)
- 在C++的字符串中搜索和删除某些字符
- 删除/替换C++字符串中的多字符 (ÿû)
- 如何删除字符串中的前 2 个字符(如果它有"-")
- 如何在 getline 中删除/忽略超过特定数字的字符?
- 如何在 c++ 中删除字符串中的某些字符?
- 从双引号括起来的子字符串中删除特定字符
- 如何从字符数组(不是字符串数组)中删除符号
- C++ 从 std::string 中删除所有非数字字符
- xcode 从源代码中删除奇怪的控制字符
- C++从句子中删除给定字符的程序不起作用
- 正在从C++中的字符数组中删除字符
- 如何检查字符串中的最后一个字符是否是某个字符并将其从字符串中删除?(C++)
- C++从字符末尾删除值
- 从字符数组中删除双空格
- 循环以从字符数组中删除过多的空格 (C++)
- 如何删除新分配的字符,这也是函数返回值?
- 删除字符串向量中的字符重复
- 将一个字符替换为字符串中更多数量的字符,而不删除C++中的其他字母
- 删除以前打印的字符
- 回文查找器:非字母数字字符删除问题