127. 单词接龙
字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列:
序列中第一个单词是 beginWord 。
序列中最后一个单词是 endWord 。
每次转换只能改变一个字母。
转换过程中的中间单词必须是字典 wordList 中的单词。
给你两个单词 beginWord 和 endWord 和一个字典 wordList ,找到从 beginWord 到 endWord 的 最短转换序列 中的 单词数目 。如果不存在这样的转换序列,返回 0。
示例 1:
输入:beginWord = "hit", endWord = "cog", wordList = ["hot","dot","dog","lot","log","cog"]
输出:5
解释:一个最短转换序列是 "hit" -> "hot" -> "dot" -> "dog" -> "cog", 返回它的长度 5。
示例 2:
输入:beginWord = "hit", endWord = "cog", wordList = ["hot","dot","dog","lot","log"]
输出:0
解释:endWord "cog" 不在字典中,所以无法进行转换。
解法一:宽度优先搜索
class Solution { public int ladderLength(String beginWord, String endWord, List<String> wordList) { if (!wordList.contains(endWord)) { return 0; } Set<String> visited = new HashSet<>(); Queue<String> queue = new LinkedList<>(); queue.offer(beginWord); visited.add(beginWord); int count = 0; while (queue.size() > 0) { int size = queue.size(); ++count; for (int i = 0; i < size; ++i) { String start = queue.poll(); for (String s : wordList) { // 已经遍历的不再重复遍历 if (visited.contains(s)) { continue; } // 不能转换的直接跳过 if (!canConvert(start, s)) { continue; } // 用于调试 // System.out.println(count + ": " + start + "->" + s); // 可以转换,并且能转换成 endWord,则返回 count if (s.equals(endWord)) { return count + 1; } // 保存访问过的单词,同时把单词放进队列,用于下一层的访问 visited.add(s); queue.offer(s); } } } return 0; } public boolean canConvert(String s1, String s2) { if (s1.length() != s2.length()) return false; int count = 0; for (int i = 0; i < s1.length(); ++i) { if (s1.charAt(i) != s2.charAt(i)) { ++count; if (count > 1) { return false; } } } return count == 1; } } 。
解法二:双向宽度优先搜索
class Solution { public int ladderLength(String beginWord, String endWord, List<String> wordList) { int end = wordList.indexOf(endWord); if (end == -1) { return 0; } wordList.add(beginWord); // 从两端 BFS 遍历要用的队列 Queue<String> queue1 = new LinkedList<>(); Queue<String> queue2 = new LinkedList<>(); // 两端已经遍历过的节点 Set<String> visited1 = new HashSet<>(); Set<String> visited2 = new HashSet<>(); queue1.offer(beginWord); queue2.offer(endWord); visited1.add(beginWord); visited2.add(endWord); int count = 0; Set<String> allWordSet = new HashSet<>(wordList); while (!queue1.isEmpty() && !queue2.isEmpty()) { count++; if (queue1.size() > queue2.size()) { Queue<String> tmp = queue1; queue1 = queue2; queue2 = tmp; Set<String> t = visited1; visited1 = visited2; visited2 = t; } int size1 = queue1.size(); while (size1-- > 0) { String s = queue1.poll(); char[] chars = s.toCharArray(); for (int j = 0; j < s.length(); ++j) { // 保存第j位的原始字符 char c0 = chars[j]; for (char c = 'a'; c <= 'z'; ++c) { chars[j] = c; String newString = new String(chars); // 已经访问过了,跳过 if (visited1.contains(newString)) { continue; } // 两端遍历相遇,结束遍历,返回 count if (visited2.contains(newString)) { return count + 1; } // 如果单词在列表中存在,将其添加到队列,并标记为已访问 if (allWordSet.contains(newString)) { queue1.offer(newString); visited1.add(newString); } } // 恢复第j位的原始字符 chars[j] = c0; } } } return 0; } }
优化牛逼
网址:127. 单词接龙 https://mxgxt.com/news/view/924376
相关内容
词语接龙大全词语接龙游戏,词语接龙规则:用成语前缀后缀扩展方法接龙
中国诗词大会,最简单又好玩的游戏――诗词接龙,你最多能对几句呢
240717 nct127红色tv更新 廷祐相关 视频一则 NCT 127 엔시티 127 삐그덕
词语接龙游戏怎么玩
歌词接龙的游戏规则(2页)
接龙
手机如何接龙
大悦相关单词
NBA巨星詹姆斯全明星赛佩戴百达翡丽127万名表
随便看看
- 本周末(5月23日
- 北京汽水音乐节全阵容官宣!李艺彤何浩楠蒋敦豪周震南曾舜晞刘雨昕等明星出席!你期待吗?
- 破风:2000年,周星驰决定用1000万来拍摄《少林足球》,然而光谢贤的片酬周星驰就愿意拿出100万,可谢贤压根儿就没瞧得起这100万,直到周星驰搬出一个人后,谢贤才答应出演。 要知道,100万在2000年可是巨款,可谢贤每部电影的片酬都是好几百万,所以他压根儿就不在乎这100万的片酬。 谢贤在电影中的角色是个大boss,不仅戏少而且钱也是最多的,像林子聪算是剧组中吃苦比较多的演员了,然而他的...
- 八卦小则:娱乐圈最新爆料: 女星函数最近在综艺里内涵前夫说谎了,主要是她的前夫和夜光剧本女星很不安分。函数当初选择跟前夫结婚,一方面是感情上的冲动,另一方面就是前夫许诺会给函数拉一些港圈的优质资源。函数曾混过港圈,可她在港圈吃了不少苦,却只能演小配角,这让函数很不甘心。而前夫则吹嘘他的父亲人脉关系广,可以让函数在港圈电影里演主角。就这样,函数听信了前夫的花言巧语,跟他结婚了。婚后函数才发现前夫骗...
- 八卦小则:娱乐圈最新爆料: 波涛汹涌的女主持人现在跟之前那个光头表面上是和好了,但实际上光头私底下还会让人孤立她。 南韩归国的舞蹈女星,其实人品还是不错的。自己当初也是吃了不少苦头,所以对于一起患难的那些老朋友都很够意思,有求必应。 林狗被成都当地一家机构拿出来做宣传了,声称是跑到他们诊所里面去做了提升类的热玛吉项目,且不说涉不涉及虚假宣传,仅仅是不保密客户隐私这件事情就已经沦丧职业道德的了...
- 八卦小则:娱乐圈最新爆料: 恋爱脑女星自从跟她那个自信的男友去了大洋彼岸“度假”之后,情况确实好了很多,在那边没什么人认识她,她觉得很自在,每天过得也很开心,男友天天带着他到处玩,她觉得这种日子就是她想要的生活。可皇上不急,太监急。恋爱脑女星家里人可不这么想,一家人辛辛苦苦打下的江山,当初为了能把她送上金字塔,这条路上可没少交过路费,到如今被自信男蛊惑的五迷三道,一天除了玩就知道玩,长远下去也不...
- 八卦小则:娱乐圈最新爆料: 一般演员拍戏是签约后拿一部分,拍到一半拿尾款,也有拍完之后再结清的;男艺人两圈虽然脾气不好,恃才放旷,然后还各种看不起自己老婆的事业,但他人品没什么大问题,不乱玩,也讲义气;两圈很多年前拍过一部电视剧,演的是个配角,结果这部戏拍完之后没多久因为题材的原因电视剧一直没法过审,拖着拖着出品公司就倒闭了;可当时两圈还有近百万的尾款没结掉,这部分钱按照正常规矩是播出的时候才能...
- 大快人心!央视网:饭圈乱象遭重拳整治,低俗炒作账号遭封禁!
- 娱乐圈圈内人吃瓜是谁,圈内人吃瓜背后的真相与内幕
- 知名男星自曝一年没拍戏,圈内人结婚随份子,嫌给太多全网征建议

