假设和是两个长度相同的字符串。两个字符串的拼写是双射映射这样每个。
同一对字符串可能不止一个拼写。例如,如果 `abcab`和我们有和等。cabab
我们要说的是,词法的权重 是一个人必须在第一个字符串中进行剪切的次数,才能获得可以重新排列以获取第二个字符串的块。形式上,这是的值个数,其中。也就是说,它是在该点的数量不会不正好1.适用于例如增加,和,因为切割一次,进入块和,和切口4次,分为五个大块。12345
123
45
12345
假设存在两个字符串和的拼写。然后,至少一个词法必须具有最小的权重。可以说这是最轻的。(可能有多个最简单的拼写;我不在乎,因为我只对权重感兴趣。)
题
我想要一种算法,给定存在两个字符串的两个字串,它们可以有效地产生两个字符串最轻的字串的精确权重。如果该算法还能产生最轻巧的字词排序,也可以,但不是必须的。
生成所有拼写并对其进行加权是一件相当简单的事情,但是可能会有很多,所以我宁愿直接找到轻型拼写的方法。
动机
引起该问题的原因如下。使计算机搜索字典并查找字谜(包含完全相同的字母的单词对)非常容易。但是产生的许多字谜没有意思。例如,在《韦伯斯特第二国际词典》中找到的最长的例子是:
胆囊
十二指肠造口术十二指肠胆囊造口术
这个问题应该清楚:这些都是索然无味,因为他们承认一个很轻的anagramming,简单地交流cholecysto
,duedeno
和stomy
段,对于一个体重2.在另一方面,这种更短的例子是更令人惊讶和有趣:
海岸线
剖面
这里最轻的字谜权重为8。
我有一个程序使用此方法来定位有趣的字谜,即所有字谜的权重很高的字谜。但这是通过生成并加权所有可能的拼写来实现的,这很慢。
cholecystoduodenostomy
is 的规范形式ccddeehlmnooooossttuyy
。)当且仅当两个词具有相同的规范形式时,它们才是字谜。您将单词存储在哈希表中,并以其规范的形式作为关键字,每当发现冲突时,便有一个字谜。