思路 BFS
套用BFS模型。用map保存每一层离树顶的长度即可。
class Solution {
public:
int BFS(string beginWord, string endWord, vector<string>& wordList) {
queue<string> qu;
set<string> visit;
qu.push(beginWord);
visit.insert(beginWord);
set<string> twordList;
map<string, int> mp;
for (string& s : wordList) {
twordList.insert(s);
mp[s] = 1;
}
mp[beginWord] = 1;
if (twordList.count(endWord) == 0) return 0;
while (!qu.empty()) {
string word = qu.front(); qu.pop();
if (word == endWord) return mp[word];
string tword;
for (int i = 0; i < word.size(); i ++) { //转换word的每一位
for (char c = 'a'; c <= 'z'; c ++) {
tword = word;
if (c != tword[i]) tword[i] = c;
if (twordList.count(tword) != 0 && visit.count(tword) == 0) {
qu.push(tword);
visit.insert(tword);
mp[tword] += mp[word];
}
}
}
}
return 0;
}
int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
return BFS(beginWord, endWord, wordList);
}
};