class Solution {
public:
int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
set<string> rest;
queue<string> visit;
int res = 0;
for (string word : wordList)
rest.insert(word);
visit.push(beginWord);
rest.erase(beginWord);
while(!visit.empty()) {
res++;
for (int i = visit.size(); i > 0; i--) {
string curr = visit.front();
visit.pop();
if (curr == endWord) return res;
for (int j = 0; j < curr.size(); j++) {
char tmp = curr[j];
for (char k = 'a'; k <= 'z'; k++) {
curr[j] = k;
if (rest.count(curr)) {
visit.push(curr);
rest.erase(curr);
}
}
curr[j] = tmp;
}
}
}
return 0;
}
};