首页 > 代码库 > leetcode 127. Word Ladder ----- java
leetcode 127. Word Ladder ----- java
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.
由于现做的126题,所以这道题其实只用BFS就可以了。
用126的答案。
public class Solution { public int ladderLength(String beginWord, String endWord, Set<String> wordList) { if( beginWord == null || beginWord.length() == 0 || wordList.size() == 0 || beginWord.length() != endWord.length() ) return 0; return BFS(beginWord,endWord,wordList); } public int BFS(String beginWord,String endWord,Set<String> wordList){ Queue queue = new LinkedList<String>(); queue.add(beginWord); int result = 1; while( !queue.isEmpty() ){ String str = (String) queue.poll(); if( str.equals(endWord) ) continue; for( int i = 0 ;i <beginWord.length();i++){ char[] word = str.toCharArray(); for( char ch = ‘a‘;ch<=‘z‘;ch++) { word[i] = ch; String Nword = new String(word); if ( wordList.contains(Nword)) { if (!map.containsKey(Nword)) { map.put(Nword, (int) map.get(str) + 1); queue.add(Nword); } } if( Nword.equals(endWord) ) return (int) map.get(str) + 1; } } } return 0; } }
去掉map,会快一些。
public class Solution { public int ladderLength(String beginWord, String endWord, Set<String> wordList) { if( beginWord == null || beginWord.length() == 0 || wordList.size() == 0 || beginWord.length() != endWord.length() ) return 0; Queue queue = new LinkedList<String>(); queue.add(beginWord); int result = 1; while( ! queue.isEmpty() ){ int len = queue.size(); for( int i = 0;i<len;i++){ String str = (String) queue.poll(); for( int ii = 0; ii < str.length();ii++){ char[] word = str.toCharArray(); for( char ch = ‘a‘; ch<=‘z‘;ch++){ word[ii] = ch; String newWord = new String(word); if( wordList.contains(newWord) ){ wordList.remove(newWord); queue.add(newWord); } if( newWord.equals(endWord) ) return result+1; } } } result++; } return 0; } }
还有更快的做法,一般是前后一起建立队列来做,会快很多。
leetcode 127. Word Ladder ----- java
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。