博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
127. Word Ladder
阅读量:4909 次
发布时间:2019-06-11

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

Given two words (beginWord and endWord), and a dictionary's word list, find the length of shortest transformation sequence from beginWord to endWord, such that:

  1. Only one letter can be changed at a time.
  2. Each transformed word must exist in the word list. Note that beginWord is not a transformed word.

Note:

  • Return 0 if there is no such transformation sequence.
  • All words have the same length.
  • All words contain only lowercase alphabetic characters.
  • You may assume no duplicates in the word list.
  • You may assume beginWord and endWord are non-empty and are not the same.

Example 1:

Input:beginWord = "hit",endWord = "cog",wordList = ["hot","dot","dog","lot","log","cog"]Output: 5Explanation: As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog",return its length 5.

Example 2:

Input:beginWord = "hit"endWord = "cog"wordList = ["hot","dot","dog","lot","log"]Output: 0Explanation: The endWord "cog" is not in wordList, therefore no possible transformation.

 解题思路:

  将题目映射到图中,顶点是每个字符串,然后两个字符串如果相差一个字符则进行连边。根据题目要求,等价于求这个图中一个顶点到另一个顶点的最短路径,我们一般用广度优先。

  每次改变单词的一个字母,然后逐渐搜索,这种求最短路径,树最小深度问题用BFS最合适。

  1. 和当前单词相邻的单词,就是和顶点共边的另一个顶点,是对当前单词改变一个字母且在字典内存在的单词
  2. 找到一个单词的相邻单词,加入BFS队列后,我们要从字典内删除,因为不删除会造成类似hog->hot->hog这样的死循环。而且删除对求最短路径没有影响,因为我们第一次找到的单词肯定是最短路径,我们是层序遍历去搜索的,最早找到的一定是最短路径,即使后面的其他单词也能转换成它,路径肯定不会比当前的路径短。这道题仅要求求出最短路径长度,不需要求输出最短路径,所以可以删除这个单词。
  3. BFS队列之间用空串“”来标示层与层的间隔,每次碰到层的结尾,遍历深度+1,进入下一层。
class Solution {    public:        int ladderLength(string beginWord, string endWord, vector
& w) { unordered_set
wordList(w.begin(),w.end());//转换为set便于操作 queue
> q; q.push(make_pair(beginWord,1)); //在单词列表中查找是否有开头的单词,有的话删掉 auto it=wordList.find(beginWord); if(it!=wordList.end()) wordList.erase(it); while(!q.empty()) { auto t=q.front(); q.pop(); if(t.first==endWord) return t.second; //遍历单词中的每个字符 for(int i=0;i

 

转载于:https://www.cnblogs.com/tianzeng/p/10045931.html

你可能感兴趣的文章
python接口自动化1
查看>>
java this关键字
查看>>
JAVA8之数据流Stream
查看>>
关于控制反转(IOC)容器 ,依赖注入(DI)模式必读文章收集
查看>>
20131214-EditPlus快捷键-第二十一天
查看>>
安装Windows服务,一直提示系统正在关机的错误。
查看>>
wake,awake,waken,awaken的区别
查看>>
MySQL 字符串拼接
查看>>
iOS-回收键盘的几种方法
查看>>
knockoutJS学习笔记09:使用mapping插件
查看>>
API开发之接口安全(二)-----sign校验
查看>>
bzoj 1047 单调队列
查看>>
Windows Phone开发之路(11) 方向处理之动态布局
查看>>
数据分析笔试题
查看>>
Random在高并发下的缺陷以及JUC对其的优化
查看>>
C# 获取文件路径,读取项目中某程序集下文件
查看>>
static关键字
查看>>
Java面向对象之接口interface 入门实例
查看>>
想成为web开发大神?那你应该从拥有良好的代码规范走起!(JavaScript篇 - 第一篇)...
查看>>
node 删除和复制文件或文件夹
查看>>