Given two words (
beginWord and
endWord), and a dictionary's word list, find the length of shortest transformation sequence from
beginWord to
endWord, such that:
- Only one letter can be changed at a time
- Each intermediate word must exist in the word list
For example,
Given:
beginWord = "hit"
endWord = "cog"
wordList = ["hot","dot","dog","lot","log"]
As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog"
,
return its length 5
.
Note:
- Return 0 if there is no such transformation sequence.
- All words have the same length.
- All words contain only lowercase alphabetic characters.
class Solution {
public:
int ladderLength(string beginWord, string endWord, unordered_set<string>& wordList) {
if(beginWord == endWord || beginWord.size() != endWord.size())
return 0;
queue<string> que;
que.push(beginWord);
que.push("");
int height = 0;
int len = beginWord.size();
while(true) {
string word = que.front();
que.pop();
if(que.empty())break;
if(word == "") {
height++;
que.push("");
continue;
}
else if(word == endWord) {
return height + 1;
}
for(auto i = 0; i < len; i++) {
for(auto j = 'a'; j <= 'z'; j++) {
char l = word[i];
word[i] = j;
if(wordList.find(word) == wordList.end()){
word[i] =l;
continue;
}
que.push(word);
wordList.erase(word);
word[i] =l;
}
}
}
return 0;
}
};