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

这题的思路很好想,就是两个只差一个字母的字符串之间连一条边。
1.但难点是怎么判断两个字符串之间仅仅一个字母不同。
2.用BFS求两个节点之间的最短路径。
3.一个注意的细节:
C++ string 转为char*
直接​​​char *chs=front.c_str();​​ 不行,因为c_str()返回类型是 const char*

需要如下:

char *chs = new char[front.size()];
strcpy(chs, front.c_str());

其实string 转char*,这样就行

string str = "abc";

char *chs = &str[0];

string str2(chs);

cout << str2 << endl;

str2输出是abc

class Solution {
public:
/**
* @param start, a string
* @param end, a string
* @param dict, a set of string
* @return an integer
*/
int ladderLength(string start, string end, unordered_set<string> &dict) {
// write your code here

queue<string> Q;
set<string> visited;

dict.insert(end);

Q.push(start);

int cnt = 1;

while (!Q.empty()){
cnt++;

int Qsize = Q.size();

while (Qsize--){
string front = Q.front();
Q.pop();

for (int i = 0; i<front.size(); i++){

//char *chs = new char[front.size()];
//strcpy(chs, front.c_str());
string chs=front;

for (char ch = 'a'; ch <= 'z'; ch++){
chs[i] = ch;
//string tmp(chs);

if (dict.count(chs) && !visited.count(chs)){
if (chs == end){
return cnt;
}
Q.push(chs);
visited.insert(chs);

}
}
}

}

}

return 0;
}
};

参考
​​​http://www.kancloud.cn/kancloud/data-structure-and-algorithm-notes/73094​