Given two words (start and end), and a dictionary, find the length of shortest transformation sequence from start to end, such that:
- Only one letter can be changed at a time
- Each intermediate word must exist in the dictionary
For example,
Given:
start = "hit"
end = "cog"
dict = ["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 start, string end, unordered_set<string> &dict) {
if (start.size() == 0 || end.size() == 0) {
return 0;
}
if (start.size() != end.size()) {
return 0;
}
vector<string> path;
int level = 1;
int count = 1;
path.push_back(start);
dict.erase(start);
while (!path.empty()) {
auto tmp = path.front();
path.erase(path.begin());
count--;
for (int j = 0; j < tmp.size(); j++) {
auto ms = tmp;
for (auto i = 'a'; i < 'z'; i++) {
if (i == ms[j]) {
continue;
}
ms[j] = i;
if (ms == end) {
return level+1;
}
if (dict.find(ms) != dict.end()) {
path.push_back(ms);
dict.erase(ms);
}
}
}
if (count == 0) {
count = path.size();
level++;
}
}
return 0;
}
};
本文介绍了一种算法,用于寻找两个单词之间的最短转换路径,每次仅改变一个字母,并确保每一步骤中的单词都存在于给定的词典中。示例展示了从'hit'到'cog'的转换过程。
2334

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



