LintCode_单词接龙
来源:互联网 发布:js log 编辑:程序博客网 时间:2024/05/22 13:10
给出两个单词(start和end)和一个字典,找到从start到end的最短转换序列
比如:
- 每次只能改变一个字母。
- 变换过程中的中间单词必须在字典中出现。
注意事项
- 如果没有转换序列则返回0。
- 所有单词具有相同的长度。
- 所有单词都只包含小写字母。
样例
给出数据如下:
start = "hit"
end = "cog"
dict = ["hot","dot","dog","lot","log"]
一个最短的变换序列是 "hit" -> "hot" -> "dot" -> "dog" -> "cog",
返回它的长度 5
思路:用宽度优先搜索即可完成,需要引入一个辅助队列,并引入一个structt结构体以方便储存途径的长度
struct mid_string{ string data; int length; // 记录途径的长度};class Solution{public: /** * @param start, a string * @param end, a string * @param dict, a set of string * @return an integer */ queue<mid_string> temp; int find_length(string start,string end,unordered_set<string> &dict) { mid_string r,s; r.data=start; r.length=1; temp.push(r); //把start单词加入队列中 dict.erase(start); //删除字典中的start单词(如果有) while(!temp.empty()) { s=temp.front(); temp.pop(); for(int i=0; i<s.data.size(); i++) { string s_copy=s.data; for(char j='a'; j<='z'; j++) { if(j==s.data[i]) continue; s_copy[i]=j; if(s_copy==end) return s.length+1; if(dict.find(s_copy)!=dict.end()) //如果能找得到 { r.data=s_copy; r.length=s.length+1; temp.push(r); dict.erase(s_copy); } } } } return 0; } int ladderLength(string start, string end, unordered_set<string> &dict) { if(start.length()==0||end.length()==0) return 0; if(start==end) return 1; return find_length(start,end,dict); }};
阅读全文
1 0
- LintCode_单词接龙
- lintcode_单词切分
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- python opencv入门 模板匹配(26)
- jq之依次显示数字5 动画4
- c语言原生实现二叉树的 非递归 中序 先序 后序 遍历
- 高斯消元
- 201612-1 中间数
- LintCode_单词接龙
- CPU使用率
- jsp/html页面图片上传并展示上传的图片
- NVIDIA Jetson TX1 系列开发教程之十一:TCP/IP文件传输
- caffe安装以及LeNet实现手写数字体识别
- 操作DOM
- c++的异常处理
- [排序] 希尔排序(Python)
- 穷举法