例如,字符串“AAABBB”将具有排列:
“阿巴巴”,
“巴巴巴”,
“阿巴巴”,
ETC
生成排列的好算法是什么? (它的时间复杂度是多少?)
这不是完整的答案,只是一个想法。
如果您的字符串的固定数量只有两个字母,我将使用二叉树和良好的递归函数。
每个节点都是包含名称的对象,名称具有父名称的前缀和后缀 A 或 B,并且名称中包含数字 A 和 B 字母。
节点构造函数从父节点获取父节点的名称以及 A 和 B 的编号,因此只需将 A 或 B 的编号加 1,并在名称中添加一个字母。
如果A(A节点)或B分别超过三个,或者它们的总和等于起始字符串的长度,则不会构造下一个节点。
现在您可以收集两棵树的叶子(它们的名字)并拥有您需要的所有排列。
Scala 或某些函数式语言(具有类似对象的功能)非常适合实现该算法。希望这会有所帮助或只是激发一些想法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)