LeetCode127——单词接龙

我的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

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值