Word Ladder
来源:互联网 发布:和程序员谈恋爱 编辑:程序博客网 时间:2024/05/29 17:29
Word Ladder
Given two words (start and end), and a dictionary, find the length of shortest transformation sequence from start to end, such that:
- Only one letter can be changed at a time
- Each intermediate word must exist in the dictionary
For example,
Given:
start = "hit"
end = "cog"
dict = ["hot","dot","dog","lot","log"]
As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog"
,
return its length 5
.
Note:
- Return 0 if there is no such transformation sequence.
- All words have the same length.
- All words contain only lowercase alphabetic characters.
public static int ladderLength(String start, String end, Set<String> dict) {if (start.equals(end))return 0;Queue<String> queue = new LinkedList<>();queue.offer(start);int min = Integer.MAX_VALUE;String tmp = queue.poll();for (String s : dict) {if (isNext(tmp, s)){if (s.equals(end))return 1;queue.offer(s);}}dict.remove(tmp);while (!queue.isEmpty()) {String tmp2 = queue.poll();int k = ladderLength(tmp2, end, dict);if (min > (k + 1))min = k + 1;}return min;}private static boolean isNext(String s1, String s2) {if (s1.length() == 0 || s2.length() == 0 || s1.length() != s2.length())return false;int len = s1.length();int count = 0;for (int i = 0; i < len; i++) {if (s1.charAt(i) != s2.charAt(i))count++;}return count == 1 ? true : false;}
运行测试之后,代码超时
参考代码如下;
public class Solution { public static int ladderLength(String start, String end, HashSet<String> dict) { if (dict.size() == 0) return 0; LinkedList<String> wordQueue = new LinkedList<String>(); LinkedList<Integer> distanceQueue = new LinkedList<Integer>(); wordQueue.add(start); distanceQueue.add(1); while(!wordQueue.isEmpty()){ String currWord = wordQueue.pop(); Integer currDistance = distanceQueue.pop(); if(currWord.equals(end)){ return currDistance; } for(int i=0; i<currWord.length(); i++){ char[] currCharArr = currWord.toCharArray(); for(char c='a'; c<='z'; c++){ currCharArr[i] = c; String newWord = new String(currCharArr); if(dict.contains(newWord)){ wordQueue.add(newWord); distanceQueue.add(currDistance+1); dict.remove(newWord); } } } } return 0; } }
0 0
- Word Ladder
- Word Ladder
- word ladder
- Word Ladder
- Word Ladder
- Word Ladder
- Word Ladder
- Word Ladder
- Word Ladder
- Word Ladder
- Word Ladder
- Word Ladder
- Word Ladder
- Word Ladder
- Word Ladder
- Word Ladder
- Word Ladder
- Word Ladder
- 卓棕浊姿鬃琢阻纂浊咨撰桌综综装孜资足
- 搭建Windows Objective-c集成开发环境
- PHP入门基础学习篇(三)
- 解决如下json格式的字符串不能使用DataContractJsonSerializer序列化和反序列化
- gcc选项-g与-rdynamic的异同
- Word Ladder
- coderforces 508A 易错
- Windows Socket 最大连接数
- hadoop 学习笔记(一)hadoop 数据流
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(二)
- 【SzNOI语法百题】【d002】加法
- 关于SafeArray的使用说明(转)
- Convert.ToDateTime
- 20150128 N2