博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode127
阅读量:5846 次
发布时间:2019-06-18

本文共 1479 字,大约阅读时间需要 4 分钟。

class Solution {    public int ladderLength(String beginWord, String endWord, List
wordList) { HashSet
wordSet = new HashSet<>(wordList); //替换掉题目中List结构,加速查找 if (!wordSet.contains(endWord)) return 0; //如果目标顶点不在图中,直接返回0 HashMap
map = new HashMap<>(); //用来存储已访问的节点,并存储其在路径上的位置,相当于BFS算法中的isVisted功能 Queue
q = new LinkedList<>(); //构建队列,实现广度优先遍历 q.add(beginWord); //加入源顶点 map.put(beginWord, 1); //添加源顶点为“已访问”,并记录它在路径的位置 while (!q.isEmpty()) { //开始遍历队列中的顶点 String word = q.poll(); //记录现在正在处理的顶点 int level = map.get(word); //记录现在路径的长度 for (int i = 0; i < word.length(); i++) { char[] wordLetter = word.toCharArray(); for (char j = 'a'; j <= 'z'; j++) { if (wordLetter[i] == j) continue; wordLetter[i] = j; //对于每一位字母,分别替换成另外25个字母 String check = new String(wordLetter); if (check.equals(endWord)) return map.get(word) + 1; //如果已经抵达目标节点,返回当前路径长度+1 if (wordSet.contains(check) && !map.containsKey(check)) { //如果字典中存在邻接节点,且这个邻接节点还未被访问 map.put(check, level + 1); //标记这个邻接节点为已访问,记录其在路径上的位置 q.add(check); //加入队列,以供广度搜索 } } } } return 0; }}

 

转载于:https://www.cnblogs.com/asenyang/p/9826805.html

你可能感兴趣的文章
SCCM 2007 客户端疑难解析(一)
查看>>
MFC图像处理-图像扫描显示之绘制基本窗口
查看>>
通过实例让你真正明白mapreduce---填空式、分布(分割)编程
查看>>
我的友情链接
查看>>
Factstone Benchmark
查看>>
【C#】ADO .Net Entities Framework使用查询语句时遇到的错误
查看>>
samba实践一
查看>>
配置RAID5
查看>>
百度运维部—趣味运动会
查看>>
Generic Programming and the STL(Standard Template Library)
查看>>
U盘启动盘还原
查看>>
第一篇文章就给八数码了
查看>>
Bochs安装的问题解决
查看>>
how to use tushare
查看>>
HDU 6095 Rikka with Competition【阅读题】【水题】
查看>>
mysqldump
查看>>
input子系统
查看>>
收集系统性能数据并通过gnuplot绘图
查看>>
如何提高客户的转化率-Call to Action的优化
查看>>
同学录
查看>>