java 433.最小基因突变(#1双端BFS).java

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 433.最小基因突变(#1双端BFS).java相关的知识,希望对你有一定的参考价值。

class Solution {
    private static final char[] candidates = new char[] {'A', 'G', 'C', 'T'};
    public int minMutation(String start, String end, String[] bank) {
        Set<String> bankSet = new HashSet<>(Arrays.asList(bank));
        Set<String> frontier = new HashSet<>();
        Set<String> frontierEnd = new HashSet<>();
        if (!bankSet.contains(end)) {
            return -1;
        } else {
            bankSet.remove(end);
        }
        frontier.add(start);
        frontierEnd.add(end);
        int res = 1;
        while (!frontier.isEmpty() && !frontierEnd.isEmpty()) {
            Set<String> temp = new HashSet<>();
            for (String str : frontier) {
                char[] s = str.toCharArray();
                for (int i = 0; i < s.length; i++) {
                    for (int j = 0; j < 4; j++) {
                        char backup = s[i];
                        if (s[i] != candidates[j]) {
                            s[i] = candidates[j];
                            String next = new String(s);
                            if (frontierEnd.contains(next)) return res;
                            if (bankSet.contains(next)) {
                                temp.add(next);
                                bankSet.remove(next); // visited
                            }
                        }
                        s[i] = backup;
                    }
                }
            }
            res++;
            if (temp.size() < frontierEnd.size()) {
                frontier = temp;
            } else {
                frontier = frontierEnd;
                frontierEnd = temp;
            }
        }
        return -1;
        
    }
}

以上是关于java 433.最小基因突变(#1双端BFS).java的主要内容,如果未能解决你的问题,请参考以下文章

java刷题--433最小基因变化

java刷题--433最小基因变化

java刷题--433最小基因变化

java刷题--433最小基因变化

LeetCode 933. 最近的请求次数 / 433. 最小基因变化 / 442. 数组中重复的数据

LeetCode 五月打卡-day07