bfs的思想 每次从队头拿一个词 从词的第一个字母开 vary from a to z
然后判断是否和end相等 相等就返回length
不等就判断这个新造的词是否在词典里 假如在就remove from dict 并且add to queue
每次这个que里存在的是同一个level的 都循环完了再len++
public class Solution {
public int ladderLength(String beginWord, String endWord, Set<String> wordList) {
if ( beginWord.equals( endWord ))
return 1;
Queue <String> que = new LinkedList <String> ();
que.add( beginWord );
wordList.remove( beginWord );
int len = 2; //初始化是2
while ( !que.isEmpty() ){
int size = que.size(); //这里!!!不能写在for里面 因为size会变
for ( int i = 0; i < size; i ++ ){
String cur = que.poll();
for ( int j = 0; j < cur.length(); j ++ ){
char [] curArr = cur.toCharArray();
for ( char c = 'a'; c <= 'z'; c ++ ){
curArr[j] = c;
String newCur = String.valueOf ( curArr );
if ( newCur.equals( endWord ) )
return len;
if ( wordList.remove( newCur ) )
que.add ( newCur );
}
}
}
len ++; //++的位置
}
return 0;
}
}

本文介绍了一种使用广度优先搜索(BFS)算法来解决单词梯度问题的方法。该算法通过每次从队列头部取出一个单词并尝试改变其每个字母来寻找目标单词,如果新单词存在于词典中则将其加入队列并从词典中移除。通过这种方式,算法可以有效地找到从起始单词到目标单词所需的最小转换步骤。
261

被折叠的 条评论
为什么被折叠?



