golang力扣leetcode 433. 最小基因变化

简介: golang力扣leetcode 433. 最小基因变化

433.最小基因变化

433.最小基因变化

题解

题目:给你一个字符串,和一个合法字符串数组,字符串每次只能变一个字符,并且是"ACGT"其中一个,变之后需要时合法字符串,问能不能变到给定的end字符串

思路:dfs+回溯

1.这里每次只能变一次,很容易想到dfs+mp判断是否合法
2.但是存在A->B->A的情况,需要把之前的字符串设为vis=true,之后再回溯掉
3.并且可能有多种路径变化,只需记录第一次的最短路径即可

代码

func minMutation(start, end string, bank []string) int {
  mp := make(map[string]bool)
  vis := make(map[string]bool)
  for _, v := range bank {
    mp[v] = true
  }
  ans := math.MaxInt32
  dirs := []byte("ACGT")
  var dfs func(cur string, step int)
  dfs = func(cur string, step int) {
    if cur == end {
      ans = step
      return
    }
    vis[cur] = true
    for i := 0; i < 8; i++ {
      for _, v := range dirs {
        temp := []byte(cur)
        if v != temp[i] {
          temp[i] = v
          cnt := string(temp)
          if ans != math.MaxInt32 || !mp[cnt] || vis[cnt] {
            continue
          }
          dfs(string(temp), step+1)
        }
      }
    }
    vis[cur] = false
  }
  dfs(start, 0)
  if ans == math.MaxInt32 {
    return -1
  }
  return ans
}
目录
相关文章
|
3月前
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
23 0
|
3月前
|
索引
821.字符的最短距离-力扣(LeetCode)
821.字符的最短距离-力扣(LeetCode)
24 0
|
4月前
|
算法
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径
|
4月前
|
算法 数据可视化 数据挖掘
最佳加油站选择算法:解决环路加油问题的两种高效方法|LeetCode力扣134
最佳加油站选择算法:解决环路加油问题的两种高效方法|LeetCode力扣134
|
4月前
|
存储 算法 数据可视化
LeetCode 力扣题目:买卖股票的最佳时机 IV
LeetCode 力扣题目:买卖股票的最佳时机 IV
|
4月前
|
存储 算法 数据可视化
LeetCode 力扣题目:买卖股票的最佳时机 III
LeetCode 力扣题目:买卖股票的最佳时机 III
|
12天前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
2月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
47 6
|
2月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
87 2
|
12天前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口