zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 433 最小基因变化

    433.

    一条基因序列由一个带有8个字符的字符串表示,其中每个字符都属于 “A”, “C”, “G”, "T"中的任意一个。

    假设我们要调查一个基因序列的变化。一次基因变化意味着这个基因序列中的一个字符发生了变化。

    例如,基因序列由"AACCGGTT" 变化至 “AACCGGTA” 即发生了一次基因变化。

    与此同时,每一次基因变化的结果,都需要是一个合法的基因串,即该结果属于一个基因库。

    现在给定3个参数 — start, end, bank,分别代表起始基因序列,目标基因序列及基因库,请找出能够使起始基因序列变化为目标基因序列所需的最少变化次数。如果无法实现目标变化,请返回 -1。

    注意:

    起始基因序列默认是合法的,但是它并不一定会出现在基因库中。
    所有的目标基因序列必须是合法的。
    假定起始基因序列与目标基因序列是不一样的。
    示例 1:

    start: “AACCGGTT”
    end: “AACCGGTA”
    bank: [“AACCGGTA”]

    返回值: 1
    示例 2:

    start: “AACCGGTT”
    end: “AAACGGTA”
    bank: [“AACCGGTA”, “AACCGCTA”, “AAACGGTA”]

    返回值: 2
    示例 3:

    start: “AAAAACCC”
    end: “AACCCCCC”
    bank: [“AAAACCCC”, “AAACCCCC”, “AACCCCCC”]

    返回值: 3

    class Solution {
        int minStepCount = Integer.MAX_VALUE;
        public int minMutation(String start, String end, String[] bank) {
            dfs(new HashSet<String>(), 0, start, end, bank);
            return (minStepCount == Integer.MAX_VALUE) ? -1 : minStepCount;
        }
        private void dfs (HashSet<String> step, int stepCount, 
            String current, String end, String[] bank) {
            if (current.equals(end)) 
                minStepCount = Math.min(stepCount, minStepCount);
            for (String str: bank) {
                int diff = 0;
                for (int i = 0; i < str.length(); i++) 
                    if (current.charAt(i) != str.charAt(i))
                        if (++diff > 1) break;
                if (diff == 1 && !step.contains(str)) {
                    step.add(str);
                    dfs(step, stepCount + 1, str, end, bank);
                    step.remove(str);
                }
            }
        }
    }
    
    
  • 相关阅读:
    3delight and useBackground
    Maya 闪电
    jcCut1.1 在Maya里实现切割物体
    jcFeather 2.3.0 Demo
    javascript深度克隆的方法
    前端调用本地摄像头实现拍照(vue) Allen
    《暗时间》 读书笔记
    阅读笔记3流浪动物救助实践困境与路径优化
    阅读笔记1濒危动物网页的设计构思
    阅读笔记2电子宠物系统设计
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075080.html
Copyright © 2011-2022 走看看