- - 囧啊, 这题卡了一下。 一直TLE。 原因为我每次扩展节点的时候都去dict里面搜索的。dict里面数据多的话就惨了。
然后正确的做法是枚举当前的改动位置,然后查找改动后是否在dict里面。怪不得dict是以hash的形式给出的,我刚看到的时候还
纳闷怎么用的hash不是vector- -我了个大囧的。
我还傻乎乎的每次扩展去dict遍历可以被扩展到的。
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
if(start == end)
return 1;
map<string, int> dist;
queue<string> q;
q.push(start);
dist[start] = 0;
while(!q.empty()){
string now = q.front();
q.pop();
for(int i = 0; i < now.size(); ++ i)
for(char c = 'a'; c <= 'z'; ++ c){
string next = now;
next[i] = c;
if(next == end)
return dist[now] + 2;
if(dict.find(next) != dict.end() && dist.find(next) == dist.end()){
dist[next] = dist[now] + 1;
q.push(next);
}
}
}
return 0;
}
};