思维导图攻破算法难题
算法思路视频讲解请点击——> b站鲁班代师讲解视频
Java代码视频讲解请点击——> b站鲁班代师讲解视频
更多精彩视频(Letecode笔试高频题、互联网大厂笔试刷题)请在bilibili搜索鲁班代师,然后搜索题号就可以,关注不走丢,感谢。
欢迎批评指正、探讨!
import java.util.*;
public class Main
{
public static void main(String[] args)
{
//读入数据
Scanner sc = new Scanner(System.in);
String beginWord = sc.next();
String endWord = sc.next();
int n = sc.nextInt();
List<String> wordList = new ArrayList<>(n);
for(int i = 0; i < n; i++)
{
wordList.add(sc.next());
}
Solution s = new Solution();
int ans = s.ladderLength(beginWord, endWord, wordList);
System.out.println(ans);
}
}
class Solution {
public int ladderLength(String beginWord, String endWord, List<String> wordList) {
HashMap<String, ArrayList> graph = new HashMap<>();
connectGraph(beginWord, wordList, graph);
int ans = BFS(beginWord, endWord, graph);
return ans;
}
//返回单词的邻接表
ArrayList<String> getNext(String word, HashSet<String> wordListSet)
{
ArrayList<String> next = new ArrayList<>();
char[] chs = word.toCharArray();
for(char cur = 'a'; cur <= 'z'; cur++)
{
for(int i = 0; i < chs.length; i++)
{
char temp = chs[i];
chs[i] = cur;
if(temp != cur)
{
if(wordListSet.contains(String.valueOf(chs)))
{
next.add(String.valueOf(chs));
}
}
chs[i] = temp;
}
}
return next;
}
void connectGraph(String beginWord, List<String> wordList, HashMap<String, ArrayList> graph)
{
wordList.add(beginWord);
HashSet<String> wordListSet = new HashSet<>(wordList);
for(int i = 0; i < wordList.size(); i++)
{
graph.put(wordList.get(i), new ArrayList<>());
}
for(int i = 0; i < wordList.size(); i++)
{
graph.put(wordList.get(i), getNext(wordList.get(i), wordListSet));
}
}
int BFS(String beginWord, String endWord, HashMap<String, ArrayList> graph)
{
Queue<Pair> queue = new LinkedList<Pair>();
queue.add(new Pair(beginWord, 1));
Set<String> visit = new HashSet<>();
visit.add(beginWord);
while(!queue.isEmpty())
{
String str = queue.peek().str;
int step = queue.poll().step;
if(str.equals(endWord))
{
return step;
}
ArrayList<String> next = graph.get(str);
for(int i = 0; i < next.size(); i++)
{
if(!visit.contains(next.get(i)))
{
queue.add(new Pair(next.get(i), step + 1));
visit.add(next.get(i));
}
}
}
return 0;
}
}
class Pair
{
String str;
int step;
Pair(String str, int step)
{
this.str = str;
this.step = step;
}
}