LeetCode 127. Word Ladder(单词梯子)
来源:互联网 发布:mac下面的图标更改 编辑:程序博客网 时间:2024/04/29 06:09
原题网址:https://leetcode.com/problems/word-ladder/
Given two words (beginWord and endWord), and a dictionary's word list, find the length of shortest transformation sequence from beginWord to endWord, such that:
- Only one letter can be changed at a time
- Each intermediate word must exist in the word list
For example,
Given:
beginWord = "hit"
endWord = "cog"
wordList = ["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 class Solution { public int ladderLength(String beginWord, String endWord, Set<String> wordList) { if (beginWord.equals(endWord)) return 1; Map<String, String[]> masks = new HashMap<>(); Map<String, List<String>> ladders = new HashMap<>(); wordList.add(beginWord); wordList.add(endWord); Iterator<String> it = wordList.iterator(); while (it.hasNext()) { String word = it.next(); char[] wa = word.toCharArray(); String[] mask = new String[wa.length]; for(int i=0; i<mask.length; i++) { char ch = wa[i]; wa[i] = '*'; mask[i] = new String(wa); wa[i] = ch; List<String> ladder = ladders.get(mask[i]); if (ladder == null) { ladder = new ArrayList<>(); ladders.put(mask[i], ladder); } ladder.add(word); } masks.put(word, mask); } List<String> currents = new ArrayList<>(); currents.add(beginWord); Set<String> visited = new HashSet<>(); visited.add(beginWord); // wordList.remove(beginWord); int dist = 0; while (!currents.isEmpty()) { dist ++; if (currents.contains(endWord)) return dist; List<String> nexts = new ArrayList<>(); for(int i=0; i<currents.size(); i++) { String current = currents.get(i); String[] mask = masks.get(current); for(int j=0; j<mask.length; j++) { List<String> ladder = ladders.get(mask[j]); for(int k=0; k<ladder.size(); k++) { String next = ladder.get(k); if (visited.contains(next)) continue; // if (!wordList.contains(next)) continue; nexts.add(next); visited.add(next); // wordList.remove(next); } } } currents = nexts; } return 0; }}
0 0
- LeetCode 127. Word Ladder(单词梯子)
- LeetCode 126. Word Ladder II(单词梯子)
- LeetCode | Word Ladder(单词梯)
- LeetCode | Word Ladder II(单词梯II)
- Word Ladder(单词阶梯)
- leetcode解题之127. Word Ladder Java版 (单词等长变换)
- [LeetCode]127.Word Ladder
- [Leetcode] 127. Word Ladder
- [leetcode] 127.Word Ladder
- Leetcode-127.Word Ladder
- 127. Word Ladder LeetCode
- Leetcode 127. Word Ladder
- LeetCode 127. Word Ladder
- leetcode 127. Word Ladder
- LeetCode 127. Word Ladder
- LeetCode-127.Word Ladder
- Leetcode 127. Word Ladder
- [leetcode] 127. Word Ladder
- 能提高效率的svn命令-shell 进入全屏
- linux的main的参数传递
- nginx配置location总结及rewrite规则写法
- java表达式问题 找零问题
- windiws server 2008R2 IIS7.5 设置win7 IIS7设置,文件夹权限配置,Authenticated Users,支持asp temp
- LeetCode 127. Word Ladder(单词梯子)
- 第12周项目1阅读程序写出运行结果1
- Nginx安装/配置/使用
- 第十二周项目3—数组类运算的实现
- BZOJ2599——[IOI2011]Race
- NGINX日志切割
- Eclipse源码学习
- 48. Rotate Image
- 个性化E-Business Suite R12登录页面(主页)