127. Word Ladder
来源:互联网 发布:linux 禁止ip访问 编辑:程序博客网 时间:2024/05/17 04:28
Given two words (beginWord and endWord), and a dictionary's word list, find the length of shortest transformation sequence frombeginWord 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.
虽然是两个字符串的转化问题,但DP貌似不好使,因为要判断是不是在set中;
然后想到的思路是构造图用最短路径,这样写下来的话先要map把set中的String映射到int,还要求出set里面可能的两两相邻的string构造一个二维连接矩阵,再用Dijkstra算法;这个貌似比较复杂,放弃
因为是最短路径的搜索,可以考虑DFS,BFS。这就比较粗暴,特别是DFS,而BFS就比较适用一点,因为只要求出最短的就好了,达到目标字符串就可以停止搜索,所以这个题目更适合用BFS。
bfs就是简单的dijkstra,就是步长为1时的特殊情况
可参考http://blog.csdn.net/zxzxy1988/article/details/8591890
public class Solution { public int ladderLength(String beginWord, String endWord, Set<String> wordList) { int cnt = 2; Set<String> reachSet = new HashSet<String>(); Set<String> nextReachSet = new HashSet<String>(); reachSet.add(beginWord); while(!reachSet.isEmpty()) { for(String word : reachSet) { char[] cs = word.toCharArray(); for(int i=0; i<cs.length; i++) { char orig = cs[i]; for(char c='a'; c<='z'; c++) { if(c == orig)continue; cs[i] = c; String newBegin = new String(cs); if(newBegin.equals(endWord))return cnt; if(wordList.contains(newBegin)){ wordList.remove(newBegin); nextReachSet.add(newBegin); } // roll back cs[i] = orig; } } } reachSet.clear(); reachSet = nextReachSet; nextReachSet = new HashSet<String>(); cnt ++; } return 0; }}
0 0
- [LeetCode]127.Word Ladder
- [Leetcode] 127. Word Ladder
- 127. Word Ladder
- [leetcode] 127.Word Ladder
- Leetcode-127.Word Ladder
- 127. Word Ladder LeetCode
- Leetcode 127. Word Ladder
- LeetCode 127. Word Ladder
- 127.Word Ladder
- 127. Word Ladder
- leetcode 127. Word Ladder
- 127. Word Ladder
- LeetCode 127. Word Ladder
- LeetCode-127.Word Ladder
- Leetcode 127. Word Ladder
- 127. Word Ladder
- [leetcode] 127. Word Ladder
- 127. Word Ladder (很重要!!!)
- 深入理解Linux中内存管理
- linux有关ifconfig的解决方法
- 树莓派驱动6轴传感器MPU6500与SPI初体验(二)
- SQL Server 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
- 前后端分离势在必行!
- 127. Word Ladder
- 二叉树的遍历代码(先序遍历,中序遍历,后序遍历)
- C/C++面试解析
- robotframework使用之“Firefox启动不起来,或者是启动了,页面是空白的,URL地址栏是空的”
- zookeeper-02-环境搭建
- 【CodeVS】2750 心系南方灾区
- Git详解之一:Git起步
- #午安,努力#11.26
- 部署WEB程序的三种方式