Leetcode 126 word ladder II
2018-02-03 21:13
337 查看
class Solution { public: vector<vector<string>> findLadders(string beginWord, string endWord, vector<string>& wordList) { vector<vector<string> > ret; unordered_set<string> wordSet(cbegin(wordList), cend(wordList)); using SVUMAP = unordered_map<string, vector<vector<string> > >; SVUMAP beginMap{ make_pair(beginWord, vector<vector<string> > {vector<string>{ beginWord } }) }; wordSet.erase(beginWord); if (wordSet.find(endWord) == wordSet.end()) return vector<vector<string> > (); SVUMAP endMap{ make_pair(endWord, vector<vector<string> > { vector<string> { endWord } }) }; wordSet.erase(endWord); SVUMAP *pBMap = &beginMap; SVUMAP *pEMap = &endMap; bool beginToEnd = true; while (!(*pBMap).empty() && !(*pEMap).empty() && ret.empty()) { if ((*pEMap).size() < (*pBMap).size()) { swap(pBMap, pEMap); beginToEnd = !beginToEnd; } SVUMAP nextMap; for (auto mp : (*pBMap)) { string wd = get<0>(mp); vector<vector<string> > bvv = get<1>(mp); for (int i = 0; i != beginWord.size(); ++i) { char c = wd[i]; for (char j = 'a'; j <= 'z'; ++j) { wd[i] = j; if ((*pEMap).find(wd) != (*pEMap).end()) { // 已经找到最短的了,但是在同及中还需要再找 vector<vector<string> > evv = (*pEMap)[wd]; if (beginToEnd) { for (auto bv : bvv) { for (auto ev : evv) { vector<string> tmp(bv); copy(crbegin(ev), crend(ev), back_inserter(tmp)); ret.emplace_back(move(tmp)); } } } else { for (auto bv : bvv) { for (auto ev : evv) { vector<string> tmp(ev); copy(crbegin(bv), crend(bv), back_inserter(tmp)); ret.emplace_back(move(tmp)); } } } continue; } if (ret.empty()) { // 所有的答案是等长的 if (wordSet.find(wd) == end(wordSet)) continue; for (auto bv : bvv) { vector<string> tmp(bv); tmp.emplace_back(wd); nextMap[wd].emplace_back(tmp); } } } wd[i] = c; } } for (auto mp : nextMap) { wordSet.erase(get<0>(mp)); } (*pBMap) = nextMap; } return ret; } };
相关文章推荐
- LeetCode力扣之126. Word Ladder II
- Leetcode 126. Word Ladder II 字符变换2 解题报告
- [leetcode] 126. Word Ladder II 解题报告
- LeetCode126—Word Ladder II
- leetcode_c++:Word Ladder II(126)
- [算法分析与设计] leetcode 每周一题: 126. Word Ladder II
- leetcode题解-126. Word Ladder II
- LeetCode(126) Word Ladder II
- [Leetcode 12] 126 Word Ladder II TO_BE_ADDED
- leetcode 126 Word Ladder II
- leetcode 126: Word Ladder II
- leetcode126 Word Ladder II
- 【LeetCode】126. Word Ladder II
- [leetcode] 126. Word Ladder II
- leetcode 126 —— Word Ladder II
- [Leetcode] 126. Word Ladder II
- 【LeetCode】126. Word Ladder II【H】
- [leetcode] 126 Word Ladder ii bfs dfs
- [leetcode] 126.Word Ladder II
- LeetCode 126. Word Ladder II(单词梯子)