首页 > 代码库 > 127. Word ladder

127. Word ladder

把这道题想象成bfs,每次生成下次需要访问的一层,然后交替。

然后可以从两头bfs,像挖隧道一样,两边那边更少就从那边走,直到中间有汇合的点,或者两边都挖不下去了

 

 1     public int ladderLength(String beginWord, String endWord, Set<String> wordList) { 2         if(beginWord == null || endWord == null || endWord.length() != beginWord.length() || wordList == null || wordList.size() == 0) { 3             return 0; 4         } 5         int len = beginWord.length(); 6         Set<String> beginSet = new HashSet<String>(); 7         Set<String> endSet = new HashSet<String>(); 8         Set<String> visited = new HashSet<String>(); 9         beginSet.add(beginWord);10         endSet.add(endWord);11         visited.add(beginWord);12         int dist = 1;13         while(!beginSet.isEmpty() && !endSet.isEmpty()) {14             if(beginSet.size() > endSet.size()) {15                 Set<String> temp = beginSet;16                 beginSet = endSet;17                 endSet = temp;18             }19             Set<String> toAdd = new HashSet<String>();20             for(String each: beginSet) {21                 char[] chs = each.toCharArray();22                 for(int i = 0; i < len; i++) {23                     char ch = chs[i];24                     for(char c = ‘a‘; c <= ‘z‘; c++) {25                         chs[i] = c;26                         String tempWord = new String(chs);27                         if(endSet.contains(tempWord)) {28                             return ++dist;29                         }30                         if(wordList.contains(tempWord) && !visited.contains(tempWord)) {31                             toAdd.add(tempWord);32                             wordList.remove(tempWord);33                             visited.add(tempWord);34                         }35                     }36                     chs[i] = ch;37                 }38             }39             dist++;40             beginSet = toAdd;41         }42         return 0;43     }

 

127. Word ladder