题目:
![](https://i-blog.csdnimg.cn/blog_migrate/cb4dcb48b3e9a17cef93c9aa387304d2.png)
代码(首刷看解析 2024年3月19日):
class Solution {
public:
int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
// 放入set
unordered_set<string> wordSet(wordList.begin(), wordList.end());
// 如果beginEnd不在数组中,返回0
if (wordSet.find(endWord) == wordSet.end()) return 0;
// 记录每个节点beginWord的距离
unordered_map<string, int> paths;
paths.insert(pair<string, int>(beginWord, 1));
// 队列,BFS
queue<string> q;
q.push(beginWord);
while (!q.empty())
{
string word = q.front();
q.pop();
int path = paths[word];
// 找到一个新单词在wordSet中且不在paths中,加入队列
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.find(newWord) != wordSet.end()
&& paths.find(newWord) == paths.end())
{
paths.insert(pair<string,int>(newWord, path + 1));
q.push(newWord);
}
}
}
}
return 0;
}
};