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

2025年--Lc167--H433.最小基因变化(广度优先搜索,需二刷)--Java版

1.题目

在这里插入图片描述

2.思路

用双向 BFS求最少变异步数:从 startGene 和 endGene 两端同时扩展,每次把一端所有基因位点(8 位)尝试替换为 ‘A’,‘C’,‘G’,‘T’ 四种碱基;一旦两端在某个字符串相遇,返回当前层数 + 1。

3.代码实现

class Solution {public int minMutation(String startGene, String endGene, String[] bank) {// 定义三个集合,分别是合法基因集合,起始基因集合,目标基因集合,起始基因记忆集,目标基因记忆集Set<String> dic=new HashSet<>();Set<String> st=new HashSet<>();Set<String> ed=new HashSet<>();Set<String> memSt=new HashSet<>();Set<String> memEd=new HashSet<>();for(String s:bank)dic.add(s);//如果基因库不包含目标,则无法转换if(!dic.contains(endGene))return -1;st.add(startGene);ed.add(endGene);//广搜return bfs(st,ed,memSt,memEd,dic,0);    }//广搜private int bfs(Set<String> st,Set<String> ed,Set<String> memSt,Set<String> memEd,Set<String>dict,int len){// 起始集合为空,那么就无法到达目标if(st.size()==0)return -1;// 优先从数量少的一端开始搜索,减少搜索量if(st.size()>ed.size())return bfs(ed,st,memSt,memEd,dict,len);Set<String> next=new HashSet<>();char[] mode={'A', 'C', 'G', 'T'};// 枚举起始集合可以一步转换的所有基因序列for(String s:st){StringBuilder tmp=new StringBuilder(s);for(int i=0;i<8;i++){for(int j=0;j<4;j++){tmp.setCharAt(i,mode[j]);String cur=tmp.toString();// 终点集合中包含了当前字符,那么直接返回步数if(ed.contains(cur)) return len+1;// 如果搜过了该种情况,就不能重复遍历if(memSt.contains(cur)) continue;// 如果是合法序列,则加入下一个搜索集合中if(dict.contains(cur)) {next.add(cur);memSt.add(cur);}tmp.setCharAt(i, s.charAt(i));}}}// 搜索下一层return bfs(next, ed, memSt, memEd, dict, len + 1);
}
}
http://www.dtcms.com/a/449891.html

相关文章:

  • 西宁网站建设的企业免费网站开发软件有哪些
  • TensorFlow2 Python深度学习 - TensorFlow2框架入门 - TensorFlow2环境安装
  • JavaScript 二维数组初始化
  • 手机网站建设制作教程wordpress二维码插件付费
  • 静态网站开发百科做58类网站需要多少钱
  • 【Ubuntu】清理空间的几种方法
  • 做网站必须有云虚拟主机公司画册
  • 网安面试题收集(1)
  • 深入理解操作系统:从管理思想到进程本质(7000字深入剖析,通俗易懂)
  • 基于汇编实现led点灯-51单片机-stc89c52rc
  • wordpress站点地址灰显视频教学网站开发需求分析
  • Docker进行达梦数据库部署
  • 怎么做才能发布网站洛克设计平台
  • 建网站一般最低多少钱永久免费域名注册网站
  • 室内设计师上网第一站ctoc的网站有哪些
  • 2025 年 AI + 编程工具实战:用新工具提升 50% 开发效率
  • TCP拥塞控制
  • 数集探秘:“有理“谜题的巧妙拆解与证明
  • 网站购物车功能关于珠海网站建设的优势
  • 【深度学习|学习笔记】从机器学习范式看神经网络能解决什么?(一)
  • 辽宁网站定制企业创业平台
  • UNIX下C语言编程与实践38-UNIX 信号操作:signal 函数与信号捕获函数的编写
  • dede 分类信息网站 模板wordpress怎么装插件
  • 分布式系统实战:电商平台架构演进
  • 基于YOLOv8+CNN的智能停车场车牌识别系统(视频图片均可)(完整实现,附完整可直接运行代码)
  • @ComponentScan组件扫描原理
  • 沈阳制作网站的公司网站开发要什么
  • MySQL 8.0存储引擎选型指南
  • 做移动端网站设计网站怎样制作
  • redis的哨兵机制简单问题