C 中2个字符串的置换
permutation of 2 strings in c++
我想编写一个提供2个字符串(char类型)并以不同方式组合的程序。例如,如果2个字符串是" ABC"answers" MN",则该程序应打印:ABCMN ABMNC AMNBC MNABC MABCN MANNBC MABNC AMBNC AMBCN ABMCN。如您所见,它们应该在每个字符串中以顺序形式。我的意思是,例如" C"不可能是" A"或" N"之前的" M"。我该怎么办?
我对c++
的了解不多,我无法编写一个完整的代码此问题,但是我将描述以下的想法和算法。
由于我们需要在每个字符串中保留字符的顺序,因此我们可以认为构建这样的组合的过程(使用您的示例abc
和mn
):
-
让我们首先考虑每个可能组合中的最后一个元素:它是
c
或n
。因此我们可以用两个元素构建列表列表:[['c'];['n']]
。 -
然后让我们看一下第二个元素:
如果
c
是最后一个元素,则可能的第二个元素b
和n
,对吗?如果
n
是最后一个元素,则可能的第二个元素c
和m
,对吗?所以让我们将上一个列表扩展到
[['b';'c'];['n';'c'];['c';'n'];['m';'n']]
-
如果以相同的方式继续到第三个元素,我们将拥有
[['a';'b';'c'];['n';'b';'c'];['b';'n';'c'];['m';'n';'c'];['b';'c';'n'];['m';'c';'n'];['c';'m';'n']]
-
继续您将获得完整列表。
这是OCAML代码,以防万一您知道功能编程
let rec comb_2 l1 l2 =
let insert x = List.map (fun y -> x::y) in
match l1, l2 with
| [], [] -> [[]]
| hd::tl, [] | [], hd::tl -> comb_2 tl [] |> insert hd
| hd1::tl1, hd2::tl2 ->
(comb_2 tl1 l2 |> insert hd1) @ (comb_2 l1 tl2 |> insert hd2)
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 两个字符串在 c++ 中不相等
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 构造<int>具有 2 个字符串文字的向量
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
- 移除前面有空格的前2个字符串
- 将stl字符串缩小到小于15个字符的容量
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 具有多个模板的模板函数,用于特定数据类型(如字符串)?
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 将字符串拆分为标记,并将标记拆分为两个单独的数组
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- c++ 构造函数 将 1 个字符串参数转换为 3 个属性
- 如何从字符串C++读取多个整数
- 比较两个字符串后卡在无限循环中
- 如何输出字符串第二个单词的第一个字母?
- 在C++中,有没有获得字符串第一个字符的最佳实践
- 将固定长度的短字符串(52个字符)压缩到小于40个
- 用这种方式比较字符串是个好方法吗
- 如何通过 bash shell 输入 c++ 字符串 >= 1024 个字符?