当前位置: 首页 > web >正文

433. 最小基因变化

https://leetcode.cn/problems/minimum-genetic-mutation/description/?envType=study-plan-v2&envId=top-interview-150

思路:
根据题目的要求,每次对start改变后得到的字符串都应该在bank中,所以如果存在一条有效变化路径,bank中肯定存在一个状态与end只差一步(start也在bank中),同理我们这样推下去如果存在一个状态等于start就代表存在结果。

class Solution {public int minMutation(String startGene, String endGene, String[] bank) {// 判断endGene是否在bank中boolean exist = false;for (String s : bank) {if(s.equals(endGene)) exist = true;}if(!exist) return -1;// 存储所有状态和距离end的步数HashMap<String, Integer> map = new HashMap<>();map.put(endGene, 0);map.put(startGene, -1);for (String s : bank) {map.put(s, -1); // -1表示未访问过}int cnt = 0;// 存储与end差cnt步变化的状态Queue<String> queue = new LinkedList<>();queue.offer(endGene);Queue<String> temp = new LinkedList<>();while (!queue.isEmpty()) {cnt++;while (!queue.isEmpty()) {String s = queue.poll();for (String str : bank) {// 如果str与s只差一个字符,并且这个状态未被访问过if (map.get(str) == -1 && differ(str, s) == 1) {if (str.equals(startGene)) {return cnt;}map.put(str, cnt);temp.offer(str);}}// 不要忘记start状态if (map.get(startGene) == -1 && differ(startGene, s) == 1) {return cnt;}}queue = temp;temp = new LinkedList<>();}return -1;}/*** 计算两个字符串之间的差异* @param s 被计算串* @param target 目标串* @return 差异的字符数*/public int differ(String s, String target) {int cnt = 0;for (int i = 0; i < s.length(); i++) {if (s.charAt(i) != target.charAt(i)) {cnt++;}}return cnt;}public static void main(String[] args) {System.out.println(new Solution().minMutation("AACCGGTT", "AACCGGTA", new String[]{}));}
}

 

http://www.xdnf.cn/news/7478.html

相关文章:

  • AcWing 223. 阿九大战朱最学——扩展欧几里得算法
  • Javascript本地存储的方式有哪些?区别及应用场景?(含Deep Seek讲解)
  • [长城杯 2024]anote
  • 怎么利用JS根据坐标判断构成单个多边形是否合法
  • HarmonyOS Next应用分层架构下组件封装开发实践
  • 子网前缀长度
  • 【General Agent Benchmark】论文分享No.12:LLF-Bench
  • Python训练第三十天
  • 新一代请求库niquests使用入门
  • 告别Spring AI!我的Java轻量AI框架实践(支持多模型接入|注解式MCP架构|附开源地址)
  • “星睿O6”AI PC 开发套件评测: NPU 算力测评(1)
  • DAY30
  • Docker 运维管理
  • 使用shell快速删除Docker容器、镜像和存储内容
  • Python海龟绘图-斗地主
  • redis在spring boot中异常退出
  • 【C语言】贪吃蛇小游戏
  • Python 实例传递的艺术:四大方法解析与最佳实践
  • 每日算法 -【Swift 算法】不含重复字符的最长子串:暴力解法 vs 滑动窗口
  • Python 实现图片浏览和选择工具
  • 出海跨境电商内容管理难?Baklib 助力打造多语言知识库与智能素材中心
  • Stable Diffusion 学习笔记02
  • 【Nextcloud】使用 LNMP 架构搭建私有云存储:Nextcloud 实战指南
  • TYUT-企业级开发教程-第5章
  • 【C++]string模拟实现
  • laravel 通过Validator::make验证后,如何拿到验证后的值
  • nmcli connection reload
  • C++ qt基类的成员变量,在派生类中需要具有不同的数据类型的解决方法
  • 【NLP】34. 数据专题:如何打造高质量训练数据集
  • 【深度学习基础/面试高频问题】常见的归一化