[译]字梯

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

原文链接: 字梯

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

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

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

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


img_d072ffb579d385a6e42e47f689dbc45a.jpe
图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;
    }
}
目录
相关文章
|
10月前
|
安全 Java 测试技术
如何在 Spring Boot 中禁用 Actuator 端点安全?
如何在 Spring Boot 中禁用 Actuator 端点安全?
1926 1
|
XML 开发框架 JSON
【Qt】Qt入门
【Qt】Qt入门
192 1
|
存储
【面试题】接雨水
【面试题】接雨水
115 0
|
数据可视化
R语言时间序列数据指数平滑法分析交互式动态可视化
R语言时间序列数据指数平滑法分析交互式动态可视化
|
机器学习/深度学习 自然语言处理 数据可视化
【Python百宝箱】数据科学的黄金三角:数据挖掘和聚类
【Python百宝箱】数据科学的黄金三角:数据挖掘和聚类
343 2
|
开发框架 安全 Java
java常用关键技术
java常用关键技术
java常用关键技术
|
安全 Java Spring
《SpringBoot系列十一》:精讲如何使用@Conditional系列注解做条件装配
《SpringBoot系列十一》:精讲如何使用@Conditional系列注解做条件装配
1154 0
《SpringBoot系列十一》:精讲如何使用@Conditional系列注解做条件装配
|
前端开发
前端项目实战贰拾伍-​react-admin+material ui渲染路由设计
前端项目实战贰拾伍-​react-admin+material ui渲染路由设计
180 0
在线教育行业云上技术服务白皮书-在线教育现状:玩家分布情况、市场占有率等-重点企业分析
在线教育行业云上技术服务白皮书-在线教育现状:玩家分布情况、市场占有率等-重点企业分析
214 0
|
运维 测试技术 Java
精华集锦 | 阿里如何提升团队的研发效能?
云效鼓励师:以下是我们整理的云效公众号上【研发效能】相关的爆款文章,这些内容中有许多都曾获得阿里技术、infoQ等多家技术自媒体大号的转载。总之,篇篇都是精华,篇篇都值得细读,送给正在提升研发效能路上的你,强烈建议收藏哟! 研发效能实践图谱 注:下划线文章,点击即可跳转 1、阿里如何定义团队的研发效能? 要想改进研发效能,先从明确定义开始。
8545 0
精华集锦 | 阿里如何提升团队的研发效能?