leetcode wordladder

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,因为防止有点字符串重复入队,在入队后需要将该字符串删除,删除后迭代器需要重置位置,此处需要额外的注意。此外,没有结构体来单独记录当前的层数,因此在设置层数的时候,是通过变量进行统计的,这个技巧也需要掌握

猜你喜欢

转载自blog.csdn.net/weixin_42246923/article/details/80661598