题目
Leetcode 127. 单词接龙
代码(首刷看解析)
class Solution {
public:
int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
unordered_set<string> wordSet(wordList.begin(), wordList.end());
if(!wordSet.count(endWord))
return 0;
unordered_map<string, int> visitMap;
queue<string> q;
q.push(beginWord);
visitMap[beginWord] = 1;
while(!q.empty()) {
auto word = q.front();
q.pop();
int path = visitMap[word];
for(int i = 0; i < word.size(); i++) {
string newWord = word;
for(int j = 0; j < 26; j++) {
newWord[i] = 'a' + j;
if(newWord == endWord)
return path + 1;
if(wordSet.count(newWord) && visitMap.find(newWord) == visitMap.end()) {
visitMap[newWord] = path + 1;
q.push(newWord);
}
}
}
}
return 0;
}
};
代码(9.21 二刷看解析)
class Solution {
public:
int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
unordered_set<string> wordSet(wordList.begin(), wordList.end());
unordered_map<string, int> visitMap;
if(!wordSet.count(endWord))
return 0;
visitMap[beginWord] = 1;
queue<string> q;
q.push(beginWord);
while(!q.empty()) {
auto word = q.front();
q.pop();
int path = visitMap[word];
for(int i = 0; i < word.size(); i++) {
string newWord = word;
for(int j = 0; j < 26; j++) {
newWord[i] = j+'a';
if(newWord == endWord)
return path+1;
if(wordSet.count(newWord) && !visitMap.count(newWord)) {
visitMap[newWord] = path+1;
q.push(newWord);
}
}
}
}
return 0;
}
};