class Solution {
public:
int ladderLength(string start, string end, unordered_set<string> &dict) {
unordered_set<string> visited;
visited.insert(start);
queue<string> que;
int curLevel = 1;
int curLevelNum = 1;
int nextLevelNum = 0;
que.push(start);
while (!que.empty())
{
string cur = que.front();
que.pop();
--curLevelNum;
for (unordered_set<string>::iterator it = dict.begin(); it != dict.end(); ++it)
{
string temp = *it;
if (canChange(temp, cur) && visited.find(temp) == visited.end())
{
que.push(temp);
visited.insert(temp);
++nextLevelNum;
}
}
if (canChange(cur, end)) return curLevel + 1;
if (curLevelNum == 0)
{
++curLevel;
curLevelNum = nextLevelNum;
nextLevelNum = 0;
}
}
return 0;
}
bool canChange(string a, string b)
{
if (a.size() != b.size())
return false;
int count = 0;
for (int i = 0; i < a.size(); ++i)
{
if (a[i] != b[i])
{
if (count == 1) return false;
++count;
}
}
return count == 0 ? false: true;
}
};[Leetcode] Word Ladder
字符串转换路径长度算法
最新推荐文章于 2019-12-06 19:32:56 发布
本文介绍了一种通过图遍历算法来寻找两个字符串之间的最短转换路径的方法。该算法使用了队列和哈希集合来记录已访问节点,并通过层级记录当前搜索深度。对于每个可能的转换步骤,算法检查是否符合单字符变化的要求且未被访问过。
2310

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



