题解 | #基因变异最小次数#

基因变异最小次数

https://www.nowcoder.com/practice/ca6b659a3fde42c59276c9db98febd94

#include <unordered_set>
#include <string>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param start string字符串 
     * @param end string字符串 
     * @param bank string字符串vector 
     * @return int整型
     */
    int minMutation(string start, string end, vector<string>& bank) {
        // write code here
        unordered_set<string> visited, bankset;
        queue<string> qu;
        qu.push(start);
        visited.insert(start);
        for (int i = 0; i < bank.size(); i++) {
            bankset.insert(bank[i]);
        }

        int operation = 0;
        vector<string> trans{"A", "C", "G", "T"};
        while (!qu.empty()) {
            int size = qu.size();
            // 对这一层的所有进行每种可能的变换
            for (int i = 0; i < size; i++) {
                string tmp = qu.front();
                qu.pop();
                // 判断是否和end相等
                if (end == tmp) {
                    return operation; 
                }
                // 对每一个位置尝试四种变换
                for (int j = 0; j < tmp.size(); j++) {
                    for (int k = 0; k < 4; k++) {
                        string next = tmp;
                        next.replace(j, 1, trans[k]);
                        if (bankset.count(next) && !visited.count(next)) {
                            qu.push(next);
                            visited.insert(next);
                        }
                    }
                }
            }
            // 这一层算一次操作
            operation++;

        }
        return -1;
    }
};

全部评论

相关推荐

每晚夜里独自颤抖:把华北改为华南再试一试,应该就没啥问题了。改完可能都不用投,别人主动联系了。
点赞 评论 收藏
分享
VirtualBool:都去逗他了?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务