day72(1.31)——leetcode面试经典150

433. 最小基因变化

433. 最小基因突变

这里我一开始弄错了,我直接一开始就将s标记好,但是我发现这样有的样例是过不了的,因为只有有效突变才能作为标记成已经访问

题目:

题解:

java 复制代码
class Solution {
    public int minMutation(String startGene, String endGene, String[] bank) {
        //先用映射将基因库中的序列赋值,方便寻找
        Map<String, Integer> map = new HashMap<>();
        for(int i=0;i<bank.length;i++) {
            map.put(bank[i], 1);
        } 
        Queue<String> queue = new LinkedList<>();
        queue.offer(startGene);
        int step = 0;
        while(queue.size()>0) {
            int size = queue.size();
            for(int l=0;l<size;l++) {
                String t = queue.poll();
                //判断一下跟最终需要的结果是否一样
                if(t.equals(endGene)) {
                    return step;
                }
                for(int i=0;i<bank.length;i++) {
                    String s = bank[i];
                    if(map.get(s)==0) {
                        continue;
                    }
                    
                    int diff = 0;
                    for(int j=0;j<s.length();j++) {
                        if(s.charAt(j)!=t.charAt(j)) {
                            diff++;
                        }
                    }
                    if(diff==1) {
                        queue.offer(s);
                        //只有有效突变才能将s标记为已访问
                        map.put(s, 0);
                    }
                }
            }
            //进行新增更改次数
            step++;  
        }
        return -1; 
    }
}
相关推荐
ychqsq25 分钟前
115.整理
经验分享·职场和发展
吃着火锅x唱着歌37 分钟前
LeetCode 3885.设计事件管理器
算法·leetcode·职场和发展
码匠许师傅1 小时前
【C++ 面试真题】聊聊 C++ 中的 lambda 表达式
java·c++·面试
程序员爱钓鱼6 小时前
Go for 循环详解
后端·面试·go
城管不管6 小时前
MySQL 慢查询完整排查
java·服务器·jvm·数据库·mysql·spring·面试
君君思密达7 小时前
LeetCode Hot 100 题目详解-滑动窗口
算法·leetcode·职场和发展
码匠许师傅16 小时前
【C++ 面试真题】聊聊 C++ 的移动语义与右值引用
java·c++·面试
fqq316 小时前
力扣刷题前置Java语法
算法·leetcode·职场和发展
Thecozzy18 小时前
大厂 AI Coding 面试大招
人工智能·面试·职场和发展
Dr.kangder19 小时前
嵌入式面试总结(十五)——异常处理
单片机·面试·职场和发展·系统架构·嵌入式