【发布时间】:2023-03-12 09:36:01
【问题描述】:
虽然对于如何找到一串唯一字符的所有(唯一)排列有很多解决方案,但我还没有找到在字符不唯一时有效的解决方案。我在下面列出了我的想法,希望得到反馈,但也可以随时提供您自己的想法。
我的想法:
为了说明我的算法,我使用了字符串 ABBC 的示例,我想找到它的所有排列。由于有两个 B,我将它们标记为 B1 和 B2。
- 通过从原始字符串中删除所有重复字符来创建一个新字符串(例如,将 AB1B2C 转换为 AB1C)。
- 查找新字符串的所有可能排列(例如 AB1C、ACB1、B1AC 等)。有很多算法可以做到这一点,因为字符串的字符都是唯一的。
- 选择一个重复的字符。对于每个排列,在排列的每个“位置”插入选择的重复字符,除非重复字符之前的字符与重复字符具有相同的值(例如,对于排列 AB1C,由于重复字符是 B2,插入它得到 B2AB1C、AB2B1C、AB1CB2。例外:不要做 AB1B2C,因为那只是 AB2B1C 的副本。
- 继续执行步骤 3,但现在选择不同的重复字符。 (这样做直到所有重复的字符都被选择了一次。)
先前的研究:Prakhar 对这个 SO 问题的回答声称适用于重复:Generate list of all possible permutations of a string。可能,但我怀疑代码中存在错误。
【问题讨论】:
-
下一个排列算法 (wiki) 可以处理非唯一字符。
标签: string algorithm permutation