换词器是一款您试图通过单字符编辑将一个单词变成另一个单词的游戏,每个步骤都是自己的单词。对于这个挑战,编辑可能是替换,插入或删除。例如,WINNER→LOSER可以使用以下路线来完成(可能还有其他路线):
WINNER
DINNER
DINER
DINE
LINE
LONE
LOSE
LOSER
换一种说法,您必须每次只能在Levenshtein距离为1的情况下通过另一个单词到达另一个单词。
编码
您将得到一个单词列表和两个单词,如果存在一条路由,则必须输出从一个单词到另一个单词的有效路由;如果不存在任何路由,则必须输出一个不同的常数值或一致的行为。
- 您可以假设输入的单词都在单词列表中
- 单词列表可以通过任何方便的平面格式输入。
- 列表,集合,尝试,空格分隔的字符串和行分隔的文件都是有效的(例如),但Levenshtein邻接关系的预先计算的图形无效。
- 输出路径应该包括两个输入词,但是开始和结束都没有关系。
- 如果未找到路由,则可以输出特定的常量,错误的值,空列表,引发异常,使用非零代码退出或在限定时间内发生的任何其他行为。
- 路线不一定是最佳路线,也没有要求应该采用哪条路线
- 计算复杂性无关紧要,但是必须证明您的程序在有限的时间内终止。(即使它超越了宇宙的热死)
- 您可以假设所有单词在相同情况下完全由字母组成
示例测试用例
- 猫→狗; [CAT,DOG,COG,COT,FROG,GROG,BOG]
- 猫,狗,狗,狗
- 浴室→淋浴; [沐浴,淋浴,卫生,帽子,BAT,SAT,锯,母猪,显示,如何]
- 找不到路线
- BREAK→FIX;[BREAK,FIX,BEAK,BREAD,READ,BEAD,RED,BED,BAD,BID,FAD,FAX]
- BREAK,BREAD,BEAD,BAD,FAD,FAX,FIX
- 建造→毁灭; [建造,毁灭,建造,公会,公会,吉尔,吉尔,比尔,莳萝,填充,破坏,结构,构造]
- 找不到路线
- 卡→板; [卡,板,板]
- 卡,板,板
- 恶魔→天使; [天使魔鬼]
- 找不到路线
- 最后→过去;[最后,过去,爆炸,投射,黑色,幽灵,后期,夸张]
- 最后,过去
- 插入→删除; 这个单词表
- 插入,倒置,侵入,弯曲,弯曲,弯曲,弯曲,变暗,达林,成骨,成骨,成丝,成串,丝氨酸,成年神经,有色,硅酸盐,硅酸盐,陶土,降级,删除