Word Ladder II
来源:互联网 发布:js两数求和 编辑:程序博客网 时间:2024/05/17 04:40
Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) fromstart to end, such that:
- Only one letter can be changed at a time
- Each intermediate word must exist in the dictionary
For example,
Given:
start = "hit"
end = "cog"
dict = ["hot","dot","dog","lot","log"]
Return
[ ["hit","hot","dot","dog","cog"], ["hit","hot","lot","log","cog"] ]
Note:
- All words have the same length.
- All words contain only lowercase alphabetic characters.
Solution:
class Solution {public: vector<vector<string>> res; void dfsPath(unordered_map<string, unordered_set<string>> &path, vector<string> &temp, const string &key) { if(path[key].size() == 0) { temp.push_back(key); vector<string> tempPath = temp; reverse(tempPath.begin(), tempPath.end()); res.push_back(tempPath); temp.pop_back(); return ; } temp.push_back(key); for(unordered_set<string>::iterator iter = path[key].begin(); iter != path[key].end(); ++iter) { dfsPath(path, temp, *iter); } temp.pop_back(); } vector<vector<string>> findLadders(string start, string end, unordered_set<string> &dict) { res.clear(); unordered_set<string> current; unordered_set<string> next; unordered_map<string, unordered_set<string>> path; if(dict.count(start) > 0) dict.erase(start); current.insert(start); while(current.count(end) == 0 && !dict.empty()) { for(unordered_set<string>::iterator iter = current.begin(); iter != current.end(); ++iter) { string str = *iter; for(int i = 0; i < str.length(); ++i) { for(char c = 'a'; c <= 'z'; ++c) { string tmp = str; if(tmp[i] == c) continue; tmp[i] = c; if(dict.count(tmp) > 0) { path[tmp].insert(str); next.insert(tmp); } } } } if(next.empty()) break; for(unordered_set<string>::iterator iter = next.begin(); iter != next.end(); ++iter) { dict.erase(*iter); } current = next; next.clear(); } vector<string> temp; if(current.count(end) > 0) dfsPath(path, temp, end); return res; }};
0 0
- Word Ladder/ Word Ladder II
- Word Ladder II
- Word Ladder II
- 【leetcode】Word Ladder II
- [LeetCode]Word Ladder II
- Word Ladder II
- [leetcode] Word Ladder II
- LeetCode - Word Ladder II
- Word Ladder II
- Leetcode: Word Ladder II
- leetcode Word Ladder II
- Leetcode Word Ladder II
- LeetCode | Word Ladder II
- Word Ladder II
- Word Ladder II
- Word Ladder II
- leetcode word ladder II
- 【Leetcode】Word Ladder II
- [leetcode-54]Spiral Matrix(C语言)
- 599 奋斗的小蜗牛
- unity调用Android通过编译 java jar包出现问题解决和简单支付流程
- 黑马程序员————C语言总结(2)
- 挑7
- Word Ladder II
- HDOJ 1106 排序
- VBScript例子程序
- ECMAScript5 DOM模型 Comment详解
- 蓝牙SoC芯片之争
- [LeetCode][Java] Regular Expression Matching
- 在AndroidManifest.xml中配置友盟cocos2dx游戏统计参数
- 黑马程序员————C语言总结(3)
- 关于mysql写触发器中运用游标的问题。