leetcode 127 单词接龙
给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:
每次转换只能改变一个字母。
转换过程中的中间单词必须是字典中的单词。
说明:
如果不存在这样的转换序列,返回 0。
所有单词具有相同的长度。
所有单词只由小写字母组成。
字典中不存在重复的单词。
你可以假设 beginWord 和 endWord 是非空的,且二者不相同。
示例 1:输入:
beginWord = "hit",
endWord = "cog",
wordList = ["hot","dot","dog","lot","log","cog"]输出: 5解释: 一个最短转换序列是 "hit" -> "hot" -> "dot" -> "dog" -> "cog",返回它的长度 5。示例 2:输入:
beginWord = "hit"
endWord = "cog"
wordList = ["hot","dot","dog","lot","log"]输出: 0解释: endWord "cog" 不在字典中,所以无法进行转换。
解题思路:
广度优先搜索,先判断字符数组中是否有endword,若没有则返回0,若有,则进行判断。
在字符数组中进行优先搜索,以数组模拟队列,先将beginword入队,再在字符数组中进行搜索,若搜索得到与beginword只有一个字符差别的字符串,则将该字符串入队,然后依次搜索入队的字符串,同样的搜索与之相差一个字符的字符串入队,直到搜索到endword为止。
代码实现:
#define maxsize 10000bool compare(char* a, char* b) //定义一个比较函数,比较字符串a和b是否只有一个字符不同
{int i;int count = 0;for (i = 0; i < strlen(a); i++){if (a[i] != b[i]){count++;}}if (count == 1){return true;}else {return false;}
}int ladderLength(char * beginWord, char * endWord, char ** wordList, int wordListSize)
{char* Queue[maxsize] = {0}; //申请一个数组模拟队列int* visited = (int*)calloc(wordListSize, sizeof(int)); //定义辅助数组int head = 0; //头指针int tail = 0; //尾指针int deep = 1; //保存最短路径for (int i = 0; i < wordListSize; i++) //判断字符串数组中是否有目标字符串{if (strcmp(endWord, wordList[i]) == 0){break;}if (i == wordListSize - 1){return 0;}}Queue[tail++] = beginWord; //入队while (head < tail) //若队列不为空{int size = tail - head; //当前层个数for (int j = 0; j < size; j++) //遍历当前层{char* cur = Queue[head++]; //首字符串出队if (strcmp(cur, endWord) == 0) //若为目标字符串则返回结果{return deep;}for (int k = 0; k < wordListSize; k++) //遍历字符串寻找与当前字符串相差一个字符的字符串,若没有遍历过,则入队{if (visited[k] == 0 && compare(cur, wordList[k])){visited[k] = 1;Queue[tail++] = wordList[k];}}}deep++; //路径加一} free(visited);return 0;
}
leetcode 127 单词接龙相关推荐
- LeetCode 127. 单词接龙(图的BFS/双向BFS)
文章目录 1. 题目 2. 图的BFS解题 2.1 单向BFS 2.2 双向BFS !厉害了 1. 题目 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord ...
- Java实现 LeetCode 127 单词接龙
127. 单词接龙 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度.转换需遵循如下规则: 每次转换只能改变一个字 ...
- LeetCode 127. 单词接龙(C++)*
思路: 1.如果采用回溯法来的话会超时: 2.这里采用构造图和广度优先遍历结合来实现:首先要构造图,需要将每个字符串对应一个数字id,然后边的构造使用矩阵来实现,这里采用将每一个字符串的id连接每个将 ...
- leetcode 127. 单词接龙(bfs)
给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度.转换需遵循如下规则: 每次转换只能改变一个字母. 转换过程中的中 ...
- LeetCode 127. 单词接龙(广度优先遍历)
题目描述 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度.转换需遵循如下规则: 每次转换只能改变一个字母. 转换 ...
- Leetcode 127. 单词接龙 解题思路及C++实现
解题思路: 首先判断wordList中是否有endWord,如果没有,就返回0. pathCount用来存储beginWord转换到某一个word所需的长度,有点类似于动态规划中用于记录状态的矩阵. ...
- leetcode 127 单词接龙
思路:BST 方向 :{a,b,c.......z} 设置一个queue ,记录当前位置 先是外层循环(queue != null) 如果 这个循环走完, 说明中间没返回, 直接返回0: 每一次 ...
- LeetCode 126. 单词接龙 II(图的BFS)
1. 题目 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列. 转换需遵循如下规则: 每次转换只能 ...
- LeetCode:127 单词接龙 无向图BFS
LeetCode:127 单词接龙 无向图BFS 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度.转换需遵循如下 ...
最新文章
- 急!!!求从字符串中提取形如: div([MC0010000000006],此若干个字符或数字,0) 的正则表达式...
- Promise从入门到精通
- php range第二个参数比第一个小,鲜为人知的 PHP range() 函数
- Fragment详解之二——基本使用方法
- redis和memcache的区别
- vim查找关键字_VIM学习笔记 对话框(Dialog)
- C语言 指针数组和数组指针区别 - C语言零基础入门教程
- php 实现跨站下载图片,一个图片url访问后直接下载怎样实现
- 资源放送丨《PostgreSQL中的锁》PPT视频
- python 内置模块random_Python3.5内置模块之random模块用法实例分析
- Linux下的wc命令
- python中时间的处理
- swoole实现Timer定时器、心跳检测及Task进阶实例:mysql连接池
- 2020-08-17每日一句
- 带时间轴的文章归档的html页面,Css打造伸缩时间轴样式的WordPress归档页面archive.php...
- BeAlert 一款alert和confirm美化插件(优化)
- jenkins插件管理提示“update information obtained
- JS中apply与call的用法
- java中打印大小写字母
- 数学149的女学霸,直言想当程序员!女生当程序员到底行不行?