[译]字梯

原文链接: 字梯

给定两个单词(开始和结束)和一个字典,从开始到结束找到最短转换序列的长度,这样只有一个字母可以在一个时间内改变,而每个中间字必须存在于字典中。
例如,给定:

start = "hit"
end = "cog"
dict = ["hot","dot","dog","lot","log"]

一个最短的转换是"hit" -> "hot" -> "dot" -> "dog" -> "cog", 程序应该返回它的长度5。

分析
更新于2015年6月7日
因此,我们很快意识到这是一个搜索问题,并且第一次搜索保证了最优解。


图1

Java解决

class WordNode{
    String word;
    int numSteps;
 
    public WordNode(String word, int numSteps){
        this.word = word;
        this.numSteps = numSteps;
    }
}
 
public class Solution {
    public int ladderLength(String beginWord, String endWord, Set<String> wordDict) {
        LinkedList<WordNode> queue = new LinkedList<WordNode>();
        queue.add(new WordNode(beginWord, 1));
 
        wordDict.add(endWord);
 
        while(!queue.isEmpty()){
            WordNode top = queue.remove();
            String word = top.word;
 
            if(word.equals(endWord)){
                return top.numSteps;
            }
 
            char[] arr = word.toCharArray();
            for(int i=0; i<arr.length; i++){
                for(char c='a'; c<='z'; c++){
                    char temp = arr[i];
                    if(arr[i]!=c){
                        arr[i]=c;
                    }
 
                    String newWord = new String(arr);
                    if(wordDict.contains(newWord)){
                        queue.add(new WordNode(newWord, top.numSteps+1));
                        wordDict.remove(newWord);
                    }
 
                    arr[i]=temp;
                }
            }
        }
 
        return 0;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 描述 给出两个单词(start和end)和一个字典,找到从start到end的最短转换序列比如:1.每次只能改变一...
    6默默Welsh阅读 1,336评论 0 0
  • 原题 给出两个单词(start和end)和一个字典,找出所有从start到end的最短转换序列比如:1.每次只能改...
    Jason_Yuan阅读 1,638评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,969评论 19 139
  • 原题 给出两个单词(start和end)和一个字典,找到从start到end的最短转换序列比如:1.每次只能改变一...
    Jason_Yuan阅读 1,271评论 1 2
  • 给出两个单词(start和end)和一个字典,找到从start到end的最短转换序列比如:每次只能改变一个字母。变...
    鬼谷神奇阅读 1,466评论 0 0