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

基因变异最小次数

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param start string字符串
     * @param end string字符串
     * @param bank string字符串一维数组
     * @return int整型
     */
    public int minMutation (String start, String end, String[] bank) {
        // write code here
        Set<String> bankSet = new HashSet<>();
        for (String gene : bank) {
            bankSet.add(gene);
        }

        Queue<String> queue = new LinkedList<>();
        Set<String> visited = new HashSet<>();
        queue.offer(start);
        visited.add(start);
        int mutations = 0;

        while (!queue.isEmpty()) {
            int size = queue.size();

            for (int i = 0; i < size; i++) {
                String curr = queue.poll();

                if (curr.equals(end)) {
                    return mutations;
                }

                char[] currArray = curr.toCharArray();
                for (int j = 0; j < currArray.length; j++) {
                    char originalChar = currArray[j];

                    for (char c : new char[] {'A', 'C', 'G', 'T'}) {
                        currArray[j] = c;
                        String nextGene = new String(currArray);

                        if (bankSet.contains(nextGene) && !visited.contains(nextGene)) {
                            queue.offer(nextGene);
                            visited.add(nextGene);
                        }
                    }

                    currArray[j] = originalChar;
                }
            }

            mutations++;
        }

        return -1;
    }
}

知识点:

BFS、循环、遍历、队列、集合

解题分析:

使用了一个队列来进行广度优先搜索。首先,将起始序列加入队列,然后开始循环遍历队列。每次从队列中取出一个序列,将其与基因库中的序列进行比较,找到所有与当前序列仅有一个字符不同的序列,并将其加入队列。如果某个序列与目标序列相同,表示找到了最短变化次数,返回当前变化次数。如果队列为空仍然没有找到目标序列,说明无法完成基因变化,返回-1。

编程语言:

java

全部评论

相关推荐

风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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