anagram字符串编辑距离算法/代码?

时间:2015-01-04 05:25:19

标签: algorithm anagram

有两个字谜字符串S和P.有两个基本操作:

  1. 交换邻居中的两个字母,例如,在BCCAB中交换“A”和“C”,费用为1.
  2. 交换字符串中的第一个字母和最后一个字母,费用为1.
  3. 问题:设计一种有效的算法,最大限度地降低将S改为P的成本。

    我尝试了一种贪婪的算法,但我找到了反例,我认为这是不正确的。我知道着名的DP问题编辑距离,但我没有得到这个的公式。

    任何人都可以提供帮助?一个想法和伪代码将是伟大的。

2 个答案:

答案 0 :(得分:0)

我想知道http://en.wikipedia.org/wiki/A * _ search_algorithm是否算得上有效?对于启发式,查找每个角色必须经过的最小距离,将字符串视为圆,并将这些距离的总和除以2。在圆圈上,每个角色需要参与足够的交换以将其一次一步地移动到其目的地,并且每个交换仅影响两个字符,因此该启发式应该是所需交换数量的下限。 / p>

答案 1 :(得分:0)

没有结束交换,答案很简单:你必须得到正确的第一个和最后一个字母,并且以后不能“保存”;因此,对于单词a i ,其中0 <= i < n你要“冒泡”正确的 0 n-1 ,然后重复单词a i 1 <= i < n-1,直到你留下0或1个字母。

使用end-swap选项,你会遇到更难的问题,因为有两个方向,每个字母可以到达正确的位置。你基本上在源词和目标词之间有一个二分图,你想要找到一个最小化距离总和的匹配。即使这不是一个真正的算法,因为每个交换移动两个字母,而不仅仅是一个。

底线是,您可能需要进行搜索,但至少可以使用无端交换距离限制搜索。