package code;
/*
* 127. Word Ladder
* 颿ï¼ç»å®å¼å§å符串ï¼ç»æå符串ï¼åä¸ä¸ªå符串æ°ç»ï¼æ¯æ¬¡æ¿æ¢å符串ä¸çä¸ä¸ªå符ï¼é®æå°å 个æ¥éª¤åä¸ºç»æ¢å符串
* é¾åº¦ï¼Medium
* åç±»ï¼Breadth-first Search
* æè·¯ï¼bfs, å©ç¨ååbfså¯ä»¥å å¿«æç´¢https://leetcode.com/problems/word-ladder/discuss/40711/Two-end-BFS-in-Java-31ms.
* Tipsï¼æææåºï¼å¾ç»å
¸çBFSï¼å¥½å¥½çç
* lc207
*/
import java.util.ArrayDeque;
import java.util.List;
import java.util.Queue;
public class lc127 {
public int ladderLength(String beginWord, String endWord, List wordList) {
if(!wordList.contains(endWord)) return 0;
Queue qu = new ArrayDeque(); //ç¨ä¸ä¸ªQueueåint size类似æ ç屿¬¡éåï¼å两个hashsetææä¸æ ·
qu.add(beginWord);
int level = 2;
while(!qu.isEmpty()){
int size = qu.size();
for (int i = 0; i < size ; i++) {
char[] curr_str = qu.remove().toCharArray();
System.out.println(String.valueOf(curr_str));
for (int j = 0; j < curr_str.length ; j++) {
char ch = curr_str[j];
for (char k = 'a'; k <='z' ; k++) { //å¦ææ¯æ¬¡æ¯è¾ä¸¤ä¸ªå符串æ¯å¦å·®ä¸ä½ï¼æ¶é´å¤æåº¦å¤ªå¤§ï¼æä»¥ç´æ¥æ¿æ¢ä¸ä¸ªå符
curr_str[j] = k;
if(String.valueOf(curr_str).equals(endWord)) return level;
if(wordList.contains(String.valueOf(curr_str))){
wordList.remove(String.valueOf(curr_str)); //è¿è¦remove
qu.add(String.valueOf(curr_str));
}
}
curr_str[j] = ch;
}
}
level++;
}
return 0;
}
}