将一个字符串转换为另一个

时间:2013-09-18 06:41:00

标签: algorithm prefix trie

这是一个面试问题。我需要将字符串a转换为b,这样一次只能更改一个字母,每次更改后,转换后的字符串都在字典中。您需要以最少的转换次数执行此操作。例如,从cat - > boy转换可以按如下方式完成:

 cat-->bat-->bot-->boy (if dictionary has bat and bot)

我可以考虑为这个问题创建一个前缀树(trie),但是一旦我有了一个trie,我不确定如何继续。有人可以提出可行的方法吗?我试图避免使用蛮力方法。

2 个答案:

答案 0 :(得分:1)

如果您想知道计算单个字符编辑的最小数量,请查看Levenshtein distance。但是,这假设只允许插入,删除和替换。

对于您的示例,更改cat - >男孩的Levenshtein距离为3,有三个替换(c-> b,a-> o,t-> y)。

如果也允许换位,那么您应该考虑Damerau–Levenshtein distance

例如,cat - > cta的Levenshtein距离为2,而Damerau-Levenshtein距离为1

答案 1 :(得分:0)

您已将问题分解为前缀trie。

要找到解决方案还需要采取更多措施:

  1. 编写一个带有输入字符串的函数,并通过查询trie-dictionary查找可能的转换。
  2. 提出an admissible heuristic,您可以用它来选择结果。
  3. 使用众所周知的最短路径算法,例如the A* search algorithm