搜索(BFS)---最短单词路径
Posted yjxyy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搜索(BFS)---最短单词路径相关的知识,希望对你有一定的参考价值。
最短单词路径
Input:
beginWord = "hit",
endWord = "cog",
wordList = ["hot","dot","dog","lot","log","cog"]
Output: 5
Explanation: As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog",
return its length 5.
Input:
beginWord = "hit"
endWord = "cog"
wordList = ["hot","dot","dog","lot","log"]
Output: 0
Explanation: The endWord "cog" is not in wordList, therefore no possible transformation.
题目描述:
??找出一条从beginword到endword的最短路径,每次移动规定为改变一个字符,并且改变之后的字符串必须在 wordList 中。
思路分析:
??采用BFS的思路找最短路径。
代码:
class Solution
public int ladderLength(String beginWord,String endWord,List<String>wordList)
if(beginWord==null||endWord==null||beginWord.equals(endWord)||!wordList.contains(endWord))
return 0;
Queue<String>q=new LinkedList<>();//构造队列辅助BFS
Set<String>visited=new HashSet<>(); //标记串是否已访问过
Set<String>dict=new HashSet<>(wordList);//wordList中可能出现重复的串
q.offer(beginWord);
visited.add(beginWord);
int len=1;
while(!q.isEmpty())
int size=q.size(); //当前队列中字符串的个数
for(int s=0;s<size;s++)
String cur=q.poll();
for(int i=0;i<cur.length();i++) //对当前字符串的每一位进行改变
for(char c='a';c<='z';c++) //搜索的方式
char []curArray=cur.toCharArray();
char c1=curArray[i];
curArray[i]=c;
String temp=new String(curArray);
if(temp.equals(endWord)) //到达endword
return len+1;
if(!visited.contains(temp)&&dict.contains(temp))
visited.add(temp);
q.offer(temp);
curArray[i]=c1;//每次只能修改一个字母,所以为了进行下一个位置的搜索,需要还原当前位置的字符。
len++; //每进行一次大的循环,长度加一。
return 0;
以上是关于搜索(BFS)---最短单词路径的主要内容,如果未能解决你的问题,请参考以下文章