日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 433. 最小基因变化(广度优先搜索)

發布時間:2024/7/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 433. 最小基因变化(广度优先搜索) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

一條基因序列由一個帶有8個字符的字符串表示,其中每個字符都屬于 “A”, “C”, “G”, "T"中的任意一個。

假設我們要調查一個基因序列的變化。一次基因變化意味著這個基因序列中的一個字符發生了變化。

例如,基因序列由"AACCGGTT" 變化至 “AACCGGTA” 即發生了一次基因變化。

與此同時,每一次基因變化的結果,都需要是一個合法的基因串,即該結果屬于一個基因庫。

現在給定3個參數 — start, end, bank,分別代表起始基因序列,目標基因序列及基因庫,請找出能夠使起始基因序列變化為目標基因序列所需的最少變化次數。
如果無法實現目標變化,請返回 -1。

注意: 起始基因序列默認是合法的,但是它并不一定會出現在基因庫中。 所有的目標基因序列必須是合法的。 假定起始基因序列與目標基因序列是不一樣的。示例 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

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/minimum-genetic-mutation
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. BFS解題

  • 模板題,用隊列實現,每個單詞的字符變成4種可能
  • bank 字符串插入哈希set中,找到了就刪除(訪問過了)
class Solution { public:int minMutation(string start, string end, vector<string>& bank) {if(start.size()!=end.size())return -1;unordered_set<string> s;for(string& b : bank)s.insert(b);//同時兼做未訪問的集合if(!s.count(end)) return -1;queue<string> q;string cur, temp;int step = 0, n, i, j;char ch[4] = {'A','G','C','T'};q.push(start);if(s.count(start))s.erase(start);while(!q.empty()){n = q.size();while(n--){cur = q.front();if(cur == end)return step;q.pop();for(i = 0; i < cur.size(); ++i){for(j = 0; j < 4; ++j){temp = cur;temp[i] = ch[j];if(s.count(temp))//未訪問的{q.push(temp);s.erase(temp);}}}}step++;}return -1;} };

0 ms 6.7 MB

總結

以上是生活随笔為你收集整理的LeetCode 433. 最小基因变化(广度优先搜索)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。