class Solution {
public:
int ladderLength(string start, string end, unordered_set<string> &dict) {
queue<string> q;
q.push(start);
int size = 0 , step =1 ;
while(!q.empty()){
size = q.size();
while(size--){
string cur = q.front();
q.pop();
if(judge(cur,end))
return step+1;
for(auto it=dict.begin();it!=dict.end();){
if(judge(*it,cur)){
q.push(*it);
it = dict.erase(it);
}
else
it++;
}
}
step++;
}
return 0;
}
bool judge(string s1,string s2){ //判断两个字符串之间是否只有一位字母不同
int cnt = 0;
for(int i=0;i<s1.size();i++){
if(s1[i] != s2[i])
cnt++;
if(cnt>=2) break;
}
return cnt==1?1:0;
}
};
bfs,因为防止有点字符串重复入队,在入队后需要将该字符串删除,删除后迭代器需要重置位置,此处需要额外的注意。此外,没有结构体来单独记录当前的层数,因此在设置层数的时候,是通过变量进行统计的,这个技巧也需要掌握
leetcode wordladder
最新推荐文章于 2020-05-07 12:28:49 发布