思路:
BFS。
注意wordDict的不断缩小,否则TLE。
每到一层,将所有可以转换的word加入到path中,count用来记录每一层是否遍历完,如果遍历完,用下一层转换的word的个数来更新count,且更新level,准备进入下一层搜索。
如果搜索到endWord,直接返回,路径长度一定是最小的。
class Solution {
public:
int ladderLength(string beginWord, string endWord, unordered_set<string>& wordDict) {
queue<string> path;
path.push(beginWord);
int level = 1;
int count = 1;
wordDict.erase(beginWord);
while(wordDict.size()>0 && !path.empty()) {
string cur_word = path.front();
path.pop();
count--;
for(int i = 0; i < cur_word.size(); ++i) { //add next level 's all the words into path and set wordDict
string tmp_word = cur_word;
for(char c = 'a'; c <= 'z'; ++c) {
if(tmp_word[i] == c) continue;
tmp_word[i] = c;
if(tmp_word == endWord) return level + 1;
if(wordDict.find(tmp_word) != wordDict.end()) {
path.push(tmp_word);
}
wordDict.erase(tmp_word);
}
}
if(count == 0) {
count = path.size();
++level;
}
}
return 0;
}
};
BFS算法实现单词转换
本文介绍了一种使用广度优先搜索(BFS)算法解决单词转换问题的方法。通过不断缩小词典规模,确保了算法效率,避免了时间复杂度过高的问题。文章详细描述了如何在每一步将可以转换的单词加入路径中,并通过计数器控制层级转换。
2316

被折叠的 条评论
为什么被折叠?



