我的LeetCode代码仓:https://github.com/617076674/LeetCode
原题链接:https://leetcode-cn.com/problems/word-ladder/description/
题目描述:
知识点:图的广度优先遍历,SPFA算法
思路一:图的广度优先遍历
(1)新建一个辅助的类LevelWord,类包含两个属性,代表word的String类型的变量,以及代表word层级的int型变量level。在构造函数可以给这两个变量赋值。
(2)新建一个辅助函数,用以判断两个字符串之间是否能够转换。遍历两个字符串,根据题意,如果不相等的字符的数量大于1,则无法相互转换。只有不相等的字符的数量等于1时,这两个字符串才能够相互转换。
(3)在ladderLength()函数里,我们首先判断endWord字符串是否在所给的wordList中,如果endWord字符串不在所给的wordList中,说明最短路径不存在,无法进行转换,依据题意,我们直接返回0。
(4)为了实现的方便,如果beginWord不在wordList中,我们将beginWord添加进wordList。
(5)新建一个boolean类型的二维数组nextWords用来表示wordList中第i个位置和第j个位置的字符串能否相互转换,如果能相互转换,则nextWords[i][j] = true。我们通过遍历nextWord两次来设置nextWords的值。由于两个点之间的转换是相互的,所以本题本质上是一个无向图。我们在遍历nextWord两次的时候可以做一次优化,同时设置nextWords[i][j]和nextWords[j][i]的值,因此我们只需遍历矩阵的上三角或者下三角即可。
(6)新建一个HashMap类型的数据visited,其键类型为String,其值类型为Boolean,用来记录wordList中对应的字符串是否已经被访问过。初始化visited时,将wordList中的所有元素都放入visited中,每个元素对应的值设为false,表示所有节点都未被访问。
(7)新建一个队列queue,里面存放的是LevelWord类型的数据,初始时&#x