127. Word Ladder

class Solution {
public:
    int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
        unordered_set<string> s(wordList.begin(), wordList.end());
        if (!s.count(endWord))  return 0;
        queue<string> q;
        q.push(beginWord);
        int lvl = 0;
        while (!q.empty()) {
            int sz = q.size();
            lvl++;
            for (int i = 0; i < sz; i++) {
                string cur = q.front(); q.pop();
                if (cur == endWord) {
                    return lvl;
                }
                for (int j = 0; j < cur.length(); j++) {
                    char saved = cur[j];
                    for (char c = 'a'; c <= 'z'; ++c) {
                        cur[j] = c;
                        if (s.count(cur)) {
                            q.push(cur);
                            s.erase(cur);
                        }
                    }
                    cur[j] = saved;
                }
            }
        }
        return 0;
    }
};
原文地址:https://www.cnblogs.com/JTechRoad/p/9063358.html