leetcode Word Ladder

这题一开始想着有点麻烦,但是后面发现其实还是bfs 暴力搜索一波就行了

class Solution {
private:
    int diff(string s1,string s2){
        int d=0;
        for(int i=0;i<s1.length();i++){
            if(s1[i]!=s2[i])
                d++;
        }
        return d;
    }
    vector<vector<int> > smap;
    vector<int> result;
    
public:
    int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
        int idx=-1;
        for(int i=0;i<wordList.size();i++){
            if(wordList[i]==beginWord){
                idx=i;
                break;
            }
        }
        if(idx==-1){
            wordList.push_back(beginWord);
            idx=wordList.size()-1;
        }
            
        for(int i=0;i<wordList.size();i++){
            vector<int> tmp;
            smap.push_back(tmp);
            result.push_back(wordList.size()*2);
        }
        
        for(int i=0;i<wordList.size();i++){
           for(int q=i+1;q<wordList.size();q++){
                if(diff(wordList[i],wordList[q])==1){
                    smap[i].push_back(q);
                    smap[q].push_back(i);
                }
            }
        }
        result[idx]=1;
        queue<int> qe;
        qe.push(idx);
        while(!qe.empty()){
            int t=qe.front();
            qe.pop();
            
            for(int i=0;i<smap[t].size();i++){
                if(result[smap[t][i]]>result[t]+1){
                    qe.push(smap[t][i]);
                    result[smap[t][i]]=result[t]+1;
                }
            }
        }
        for(int i=0;i<wordList.size();i++){
            if(wordList[i]==endWord){
                if(result[i]>wordList.size())
                    return 0;
                else
                    return result[i];
            }
        }
        
        return 0;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值