class Solution {
public:
int ladderLength(string start, string end, unordered_set<string> &dict) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
unordered_set<string> visited;
queue<string> Q;
visited.insert(start);
Q.push(start);
int dist = 1;
int cnt = 1;
while (cnt > 0)
{
while (cnt > 0)
{
string s = Q.front();
Q.pop();
for (int i = 0; i < s.size(); ++i)
{
char tmp = s[i];
for (char ch = 'a'; ch <= 'z'; ++ch)
if (ch != tmp)
{
s[i] = ch;
if (s == end)
return dist + 1;
if (dict.count(s) > 0 && visited.count(s) == 0)
{
visited.insert(s);
Q.push(s);
}
}
s[i] = tmp;
}
--cnt;
}
++dist;
cnt = Q.size();
}
return 0;
}
};
参考:http://blog.sina.com.cn/s/blog_b9285de20101j1xl.html