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:

  1. Only one letter can be changed at a time
  2. 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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大陆微信号在台湾登录不上怎么办 威纶触摸屏被禁止到反编译了怎么办 微信公众号邮箱被占用怎么办 京东绑定的手机号不用了怎么办 绑定微信的手机号不用了怎么办 绑定支付宝的手机号不用了怎么办 百度账号手机号换了密码忘了怎么办 换手机好了华为账号密码忘了怎么办 苹果手机忘了id账号和密码怎么办 金立手机账号密码忘了怎么办 乐视手机账号密码忘了怎么办 企业邮箱发出去邮件撤不回来怎么办 餐厅加热保温设备零线带电怎么办 小米手机不小心把照片删了怎么办 华为手机不小心把照片删了怎么办 网易邮箱被改成别人的姓名怎么办 苹果手机忘记id密码和邮箱怎么办 163邮箱下载的附件没有了怎么办 小米自带浏览器打开网页太慢怎么办 再歪一点授权码忘记了怎么办 注册支付宝的手机号不用了怎么办 手机号被别人注册了支付宝怎么办 支付宝账号密码都忘了怎么办 申请微信公众号邮箱被占用怎么办 邮箱注册微博需要手机验证怎么办 苹果手机的ad码忘记了怎么办 苹果手机酷狗音乐没有声音怎么办 在手机屏上不能缷载软件怎么办? 手机酷狗音乐下载歌曲要钱怎么办 酷狗下载歌曲后歌词不见了怎么办 手机酷我音乐缓冲文件损坏怎么办 苹果手机音乐里的歌删掉了怎么办 上课学生把粉笔擦藏起来了怎么办 手机没法解压10g压缩包怎么办 苹果id被锁邮箱也忘记密码怎么办 手机号注册的微信忘记密码怎么办 qq号注册微信忘记密码怎么办 云课堂密码忘记手机号更改了怎么办 孩子做事才要奖励怎么办的教案 员工做事效率低家庭情况不好怎么办 安全云课堂人脸识别失败怎么办