将该问题看作图来求解,某结点相邻结点即为改变一字母后存在于dict的单词,BFS较DFS省时间。
博客http://blog.csdn.net/zxzxy1988/article/details/8591890 阐述的很详细
代码
class Solution
{
public:
int ladderLength(string start, string end, unordered_set<string> &dict)
{
queue<string> queue_pop, queue_push;
int distance = 1;
queue_pop.push(start);
while(!dict.empty()&&!queue_pop.empty())
{
while(!queue_pop.empty())
{
string str(queue_pop.front());
queue_pop.pop();
for(int i = 0; i < str.size(); ++i)
for(char j = 'a'; j <= 'z'; ++j)
{
if(j==str[i])
continue;
char temp = str[i];
str[i] = j;
if( str == end )
return distance + 1;
if(dict.count(str))
{
queue_push.push(str);
dict.erase(str);
}
str[i] = temp;
}
}
swap(queue_pop, queue_push);
distance++;
}
return 0;
}
};