给定两个排序的向量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 过滤器要多得多。我希望有一个算法直接生成正确的算法。欢迎任何改进。