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

本文详细介绍了如何使用Java解决433号LeetCode题目——最小基因变化,通过实例展示了如何遍历基因库,利用哈希集合管理和字符串操作实现基因转换路径。代码中涉及了字符串处理、数据结构如队列和哈希集,以及遍历和搜索策略。
摘要由CSDN通过智能技术生成

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;
    }
}

结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值