这道题用图的广度优先搜索。
先是建一张图,需要O(N2)复杂度。大数据超时,发现不需要建图,直接遍历dict查找邻居放入队列,再从dict中删除,这样复杂度应该是O(答案长度*N)。N是dict长度。
结果还是超时。
参考网上比较多的不用遍历dict查找,而利用hashset的O(1)的访问性质,因为是字符串,所以可以通过O(字符串长度*24)即可获得所有邻居。因为题目中字符串长度都很短,所以复杂度很低。
class Solution {
public:
int ladderLength(string start, string end, unordered_set<string> &dict) {
int res = 0;
dict.insert(end);
queue<pair<string,int> > que;
que.push(pair<string,int>(start,1));
while(!que.empty()){
pair<string,int> s = que.front();
que.pop();
if(s.first == end){
res = s.second;
break;
}
string str = s.first;
for(int i=0;i<str.length();i++){
for(char j='a';j<='z';j++){
if(str[i]==j)
continue;
char tmp = str[i];
str[i] = j;
if(dict.find(str)!=dict.end()){
que.push(pair<string,int>(str,s.second+1));
dict.erase(str);
}
str[i] = tmp;
}
}
}
return res;
}
};