[LeetCode] 把一个单词变形成为另一个单词,每次变形只改变一个单词 word ladder
来源:互联网 发布:基于java的web开发 编辑:程序博客网 时间:2024/06/05 08:52
给定两个相等长度的单词,写一个算法,把一个单词变形成为另一个单词,每次变形只改变一个单词。此过程中得到的每个单词必须是字典里存在的单词。
EXAMPLE
Input: DAMP, LIKE
Output: DAMP -> LAMP -> LIMP -> LIME -> LIKE
思路:
这其实就是广度优先遍历。遍历过程中,我们需要记录路径,在找到目标单词后,根据记录的路径打印出变形过程。
int ladderLength(string start, string end, unordered_set<string> &dict) {// The driver function map<string, vector<string>> graph; // The graph // Build the graph according to the method given in: // http://yucoding.blogspot.com/2013/08/leetcode-question-127-word-ladder.html for(unordered_set<string>::iterator it = dict.begin(); it!=dict.end(); it++) { graph[*it] = findDict(*it, dict); // find out the neighbors of *it } // Do breadth first traversal return BFT(start, end, graph); } int BFT(string start, string end, map<string, vector<string>>& graph) { deque<pair<string,int>> queue; // The queue for holding the nodes in the graph unordered_set<string> visited; // Mark those nodes that have been visited queue.push_back( pair<string, int>(start,1) ); // push back the string and its level while(queue.size()>0) { pair<string,int> front = queue.front(); queue.pop_front(); if(front.first==end) return front.second; vector<string> vec = graph[front.first]; for(int i=0; i<vec.size(); i++) { if(visited.find(vec[i])==visited.end()) { visited.insert(vec[i]); queue.push_back(pair<string,int>(vec[i], front.second+1) ); } } } return 0; } vector<string> findDict(string str, unordered_set<string> &dict){ // Find out the neighbors of str in dict vector<string> res; int sz = str.size(); string s = str; for (int i=0;i<sz;i++){ s = str; for (char j = 'a'; j<='z'; j++){ s[i]=j; if (dict.find(s)!=dict.end()){ res.push_back(s); } } } return res; }
- [LeetCode] 把一个单词变形成为另一个单词,每次变形只改变一个单词 word ladder
- Word Ladder 单词台阶
- [LeetCode]—Word Ladder 单词递推
- LeetCode | Word Ladder(单词梯)
- LeetCode 127. Word Ladder(单词梯子)
- ***[Lintcode]Word Ladder 单词接龙
- Word Ladder(单词阶梯)
- LeetCode | Word Ladder II(单词梯II)
- LeetCode 126. Word Ladder II(单词梯子)
- LeetCode Length of Last Word最后一个单词的长度
- leetcode:Length of Last Word最后一个单词的长度
- [LeetCode] Length of Last Word - 最后一个单词的长度
- leetcode 58.Length of Last Word-最后一个单词长度
- LeetCode Length of Last Word(最后一个单词的长度)
- (LeetCode)Length of Last Word --- 最后一个单词的长度
- 一个单词单词字母交换,可得另一个单词,如army->mary,成为兄弟单词。提供一个单词,在字典中找到它的兄弟。描述数据结构和查询过程
- 单词变换路径 Word Ladder II
- (母函数变形)hdu 2082 找单词
- mysql error code(备忘)
- python的Pattern模块
- 本机不安装Oracle客户端,使用PL/SQL Developer连接远程数据库
- HTTP常见响应状态码
- 上传文件大小限制
- [LeetCode] 把一个单词变形成为另一个单词,每次变形只改变一个单词 word ladder
- 南京将对动迁拆违不力责任人先免职后处理-动迁拆违-拆迁-违建
- RFC2516中文翻译版(PPPOE)
- MySQL 5.1.x 升级 5.5.x 问题
- ArcSDE 日志文件表(二)
- Android中的Handler总结
- WinCE上下滑动浏览数据
- 什么是周k线,月K线,年K线?周k线,月K线,年K线是什么意思
- 企业资金链断裂的主要原因