LeetCode 127. Word Ladder 广度优先搜索 BFS

Word Ladder - LeetCode
给定一个两个词 beginWord, endWord 与一个unordered_set wordList。从beginWord开始,每次更改一个字母变到wordList中包含的一个词。求最少几次可以从beginWord变到endWord

思路是从beginWord开始,查找在wordDict里面所有改变一个字母能变成的词,加到toVisit里面。然后在查找toVisit里面的词。这样一层一层的查找方法显然是BFS

当已经找到endWord时,查找已完成,返回res。PS:res初始为2(beginWord 与 endWord)

class Solution {
public:
    int ladderLength(string beginWord, string endWord, unordered_set<string>& wordList) {
        wordList.insert(endWord);
        queue<string> toVisit;
        bfs(beginWord, wordList, toVisit);
        int res = 2;
        while(not toVisit.empty()) {
            int size = toVisit.size();
            while (size--) {
                auto cur = toVisit.front();
                toVisit.pop();
                if (cur == endWord) return res;
                bfs(cur, wordList, toVisit);
            }
            res++;
        }
        return 0;
    }
private:
    void bfs(string word, unordered_set<string>& wordList, queue<string>& toVisit) {
        wordList.erase(word);
        for (int i = 0; i < word.length(); i++) {
            char originalLetter = word[i];
            for (int l = 0; l < 26; l++) {
                word[i] = 'a' + l;
                if (wordList.find(word) != wordList.end()) {
                    toVisit.push(word);
                    wordList.erase(word);
                }
            }
            word[i] = originalLetter;
        }
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,350评论 0 33
  • Word Ladder I:https://leetcode.com/problems/word-ladder/ ...
    stepsma阅读 3,621评论 0 0
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,747评论 0 17
  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 18,125评论 2 36
  • 六年级九班 刘浩然 风雨后, 天边出现了彩虹桥 爷爷说 年轻时他做过牛郎织女的梦 拉着奶奶的手在桥上看星星 奶奶抿...
    大唐小筑阅读 3,218评论 0 2