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

Posted Anrys

tags:

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

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

题目

代码

class Solution {
    public int minMutation(String start, String end, String[] bank) {
        HashSet<String> set = new HashSet<>();
        for(String b:bank) set.add(b);  //把bank中的字符都存到set
        if(!set.contains(end)) return -1;
        LinkedList<String> que = new LinkedList<>();
        que.offer(start);
        if(set.contains(start)) set.remove(start); //必须删除掉 免得影响转换
        int res = 0;
        char[] ch = {'A','C','G','T'};
        while(!que.isEmpty()){
            res++;
            int size = que.size();
            for(int i = 0;i<size;i++){
                char[] cur = que.poll().toCharArray();//取出第一个String并转为char
                for(int j = 0;j<8;j++){
                    char tmp = cur[j];
                    //换第j位上的基因,这一步一定会成功进行的--->换某个位置上的基因更新整体String直到New的string存在bank,此时把新的String加入队列,并从bank中移除
                    for(int k = 0;k<4;k++){
                        if(tmp!=ch[k]){
                            cur[j] = ch[k];//尝试转换并新建一String s
                            String s = new String(cur);
                            if(set.contains(s)){  //如果s在基因库中
                                if(s.equals(end)) return res; //s等于最终值则返回res数目
                                set.remove(s); //若不等于把 , 则去除库中的s免得影响后面
                                que.offer(s);  //队列中重新加入并改造
                            }
                        }
                    }//一次换基因成功后,重新换回来,进行下一个j的基因位替换并存于que
                    cur[j] = tmp;
                }
            }
        }return -1;
    }
}

结果

以上是关于java刷题--433最小基因变化的主要内容,如果未能解决你的问题,请参考以下文章

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

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

LeetCode 433 最小基因变化[BFS] HERODING的LeetCode之路

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

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

搜索