给定两个排序的向量a和b,找出所有向量,它们是 的a和和 的一些排列b,并且一旦排序是唯一的。
您可以通过以下方式创建寻找的向量之一:
- 取向量
a和向量的排列b。 - 把它们加在一起
c[i]=a[i]+b[i]。 - 排序
c。
我有兴趣找到b产生整个唯一c向量集的 -permutations 集。
示例 0 : a='ccdd'andb='xxyy'
给出求和向量:'cycydxdx', 'cxcxdydy', 'cxcydxdy'.
请注意b:'xyxy'和的排列'yxyx'是相等的,因为在这两种情况下,“box c”和“box d”都恰好得到 one'x'和 one 'y'。
我想这类似于M将球放入M盒子中(每个盒子一个),其中一些球和盒子组是相同的。
更新:给定一个字符串a='aabbbcdddd',b='xxyyzzttqq'您的问题将是 4 个盒子中的 10 个球。有 4 个大小为 2、3、1 和 4 的不同盒子。球是成对的,无法区分。
示例 1:给定字符串是a='xyy'和b='kkd'。
可能的解决方案:'kkd', 'dkk'.
原因:我们看到所有唯一的排列b是'kkd'和。然而,由于我们的限制,前两个排列被认为是相等的,因为差异映射到string中的相同 char 的索引。'kdk''dkk''y'a
示例 2:给定字符串是a='xyy'and b='khd'。
可能的解决方案:'khd', 'dkh', 'hkd'.
示例 3:给定字符串是a='xxxx'和b='khhd'。
可能的解决方案:'khhd'.
我可以使用Wikipedia/Permutationb中描述的 Narayana Pandita 算法解决生成唯一候选排列的问题。
第二部分接缝更难。我最好的办法是将两个字符串成对加入一个列表,对其进行排序并将其用作查找集中的键。(+连接→<code>'xh','xd' 排序→<code>'xd','xh')。'xx''hd'
由于 myM通常非常大,并且字符串中的相似性很常见,因此我目前生成的b排列方式比实际通过 set 过滤器要多得多。我希望有一个算法直接生成正确的算法。欢迎任何改进。