76 BFS解单词接龙

问题描述:给定两个单词(beginWord和endWord)和一个字典,找到从beginWord到endWord的最短转换序列的长度,转换需要遵循一下规则:每次转换只能改变一个字母,转换过程中的中间大慈必须是字典中的单词;说明:如果不存在这样的转换序列,返回0,所有的单词具有相同的长度,所有单词都由小写字母组成,字典中不存在重复的单词,可以假设beginWord和endWord是非空的,且二者不相同。

bfs求解,每一层bfs将所有能考虑到的将单词改变一个字母的单词,且存在于wordDict中,且没有遍历过,则加入队列中,直到找到这个单词或遍历完所有情况。并返回当前层次即可。

public int minStep(String beginWord,String endWord,List<String>wordDict)
{
Set<String>wordSet=new HashSet<>(wordDict);
Set<String>set=new HashSet<>();
Queue<String>queue=new LinkedList<>();
set.add(beginWord);
queue.add(beginWord);
int level=0;
while(!queue.isEmpty())
{
int queueSize=queue.size();
for(int i=0;i<queueSize;i++)
{
String tempStr=queue.poll();
if(tempStr.equals(endWord)){return level;}
for(int j=0;j<tempStr.length();j++)
{
for(char j='a';j<='z';j++)
{
String changeStr=tempStr.substring(0,j)+j+tempStr.substring(j+1);
if(!wordSet.contains(changeStr)||set.contains(changeStr))
{
continue;
}else
{
queue.add(changeStr);
}
}
}
}
level++;
}
return -1;
}