leetcode BFS(python+c++)

1.最小基因变化

思路:bfs搜索回溯

python: 

class Solution:
    def minMutation(self, start: str, end: str, bank: List[str]) -> int:
        library = ['A','C', 'G','T']
        queue = [start]
        num = 0
        vis = set()
        while queue:
            size = len(queue)
            for i in range(size):
                cur = queue.pop(0)
                if cur == end:
                    return num                
                for j in range(len(cur)):
                    for letter in library:
                        temp = cur[:j] + letter +cur[j+1:]
                        if temp in bank and temp not in vis:
                            queue.append(temp)
                            vis.add(temp)
            num += 1
        return -1

c++:

class Solution {
public:
    int minMutation(string start, string end, vector<string>& bank) {
        string library = "ACGT";
        queue<string> queue_;
        queue_.push(start);
        int num = 0;
        unordered_set<string> vis;
        while(!queue_.empty()){
            int size = queue_.size();
            for(int i = 0; i < size; i++){
                string cur = queue_.front();
                queue_.pop();
                if(cur == end){
                    return num;
                }
                for(int j = 0; j < cur.size(); j++){
                    for(auto letter : library){
                        string temp = cur.substr(0, j) + letter + cur.substr(j+1, cur.size() - j - 1);
                        // cout<<temp<<endl;
                        if(std::find(bank.begin(), bank.end(), temp) != bank.end() && 
                        vis.find(temp) == vis.end()){
                            queue_.push(temp);
                            vis.insert(temp);
                        }
                    }
                }
            }
            num ++ ;
        }
        return -1;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值