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

力扣(LeetCode)433. 最小基因变化(2023.03.07)

基因序列可以表示为一条由 8 个字符组成的字符串,其中每个字符都是 ‘A’、‘C’、‘G’ 和 ‘T’ 之一。

假设我们需要调查从基因序列 start 变为 end 所发生的基因变化。一次基因变化就意味着这个基因序列中的一个字符发生了变化。

例如,“AACCGGTT” --> “AACCGGTA” 就是一次基因变化。
另有一个基因库 bank 记录了所有有效的基因变化,只有基因库中的基因才是有效的基因序列。(变化后的基因必须位于基因库 bank 中)

给你两个基因序列 start 和 end ,以及一个基因库 bank ,请你找出并返回能够使 start 变化为 end 所需的最少变化次数。如果无法完成此基因变化,返回 -1 。

注意:起始基因序列 start 默认是有效的,但是它并不一定会出现在基因库中。

示例 1:

输入:start = “AACCGGTT”, end = “AACCGGTA”, bank = [“AACCGGTA”]
输出:1

示例 2:

输入:start = “AACCGGTT”, end = “AAACGGTA”, bank = [“AACCGGTA”,“AACCGCTA”,“AAACGGTA”]
输出:2

示例 3:

输入:start = “AAAAACCC”, end = “AACCCCCC”, bank = [“AAAACCCC”,“AAACCCCC”,“AACCCCCC”]
输出:3

提示:

start.length == 8
end.length == 8
0 <= bank.length <= 10
bank[i].length == 8
start、end 和 bank[i] 仅由字符 [‘A’, ‘C’, ‘G’, ‘T’] 组成

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-genetic-mutation

方法一:BFS

C++提交内容:

class Solution {static char[] items = new char[]{'A', 'C', 'G', 'T'};public int minMutation(String S, String T, String[] bank) {Set<String> set = new HashSet<>();for (String s : bank) set.add(s);Deque<String> d = new ArrayDeque<>();Map<String, Integer> map = new HashMap<>();d.addLast(S);map.put(S, 0);while (!d.isEmpty()) {int size = d.size();while (size-- > 0) {String s = d.pollFirst();char[] cs = s.toCharArray();int step = map.get(s);for (int i = 0; i < 8; i++) {for (char c : items) {if (cs[i] == c) continue;char[] clone = cs.clone();clone[i] = c;String sub = String.valueOf(clone);if (!set.contains(sub)) continue;if (map.containsKey(sub)) continue;if (sub.equals(T)) return step + 1;map.put(sub, step + 1);d.addLast(sub);}}}}return -1;}
}
http://www.lryc.cn/news/33608.html

相关文章:

  • 网络基础(2)
  • 掌握Spring Cloud Gateway:构建高性能API网关的原理和实践
  • NAST概述
  • 【JS知识点】——原型和原型链
  • c盘怎么清理到最干净?有什么好的清理方法
  • day26_HTML
  • 深度剖析C语言预处理
  • 【WPF 值转换器】ValueConverter 进阶用法
  • Vue2的基本使用
  • 【云原生kubernetes】k8s数据存储之Volume使用详解
  • SerDes---CDR技术
  • 如何实现在on ethernetPacket中自动回复NDP response消息
  • CSS清楚浮动
  • HTTPS详解(原理、中间人攻击、CA流程)
  • EventLoop机制
  • 倒立摆建模
  • SpringSecurity支持WebAuthn认证
  • 深度学习技巧应用3-神经网络中的超参数搜索
  • 【信号量机制及应用】
  • 围棋高手郭广昌的“假眼”棋局
  • 学成教育-统一异常处理实现
  • JNI内通过参数形式从C/C++中传递string类型数据至Java层
  • 自动化测试——执行javaScript脚本
  • 常用十种算法滤波
  • IO多路复用
  • Python中的错误是什么,Python中有哪些错误
  • 记录自己开发一款小程序中所遇到的问题(uniapp+uview)(持续更新)
  • 华为机试 HJ43 迷宫问题
  • 数据结构|链表
  • 计算机写论文时,怎么引用文献? - 易智编译EaseEditing