题目:
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 (wordList.empty())return 0;
vector<string> wordlist(wordList.begin(), wordList.end());
int len = wordlist[0].size();
queue<string> que;
queue<int> qur;
vector<string>::iterator it;
que.push(beginWord);
qur.push(1);
while (!que.empty()) {
string key = que.front();
int level = qur.front();
qur.pop();
que.pop();
int rec = 0;
for (int i = 0; i<len&&rec<2; ++i)
if (key[i] != endWord[i])rec++;
if (rec<2)return level + 1;
it = wordlist.begin();
while (it != wordlist.end()) {
rec = 0;
for (int i = 0; i<len&&rec<2; ++i)
if (key[i] != (*it)[i])rec++;
if (rec == 1) {
que.push(*it);
qur.push(level + 1);
it = wordlist.erase(it);
}
else it++;
}
}
return 0;
}
};