国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

力扣_字符串10—重復(fù)的DNA序列

這篇具有很好參考價(jià)值的文章主要介紹了力扣_字符串10—重復(fù)的DNA序列。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

題目

DNA序列 由一系列核苷酸組成,縮寫為 ‘A’, ‘C’, ‘G’ 和 ‘T’.。

例如,“ACGAATTCCG” 是一個(gè) DNA序列 。
在研究 DNA 時(shí),識(shí)別 DNA 中的重復(fù)序列非常有用。

給定一個(gè)表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出現(xiàn)不止一次的 長度為 10 的序列(子字符串)。你可以按 任意順序 返回答案。

示例 1:

輸入:s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”
輸出:[“AAAAACCCCC”,“CCCCCAAAAA”]文章來源地址http://www.zghlxwxcb.cn/news/detail-827755.html

方法

  • 哈希+滑動(dòng)窗口
    • 由于 s 中只含有 4 種字符,我們可以將每個(gè)字符用 2 個(gè)比特表示,即:
      • A 表示為二進(jìn)制 00
      • C 表示為二進(jìn)制 01
      • G 表示為二進(jìn)制 10
      • T 表示為二進(jìn)制 11
    • 我們可以將 s 的每個(gè)長為 10 的子串用一個(gè) int 整數(shù)表示(只用低 20 位),該 int 作為哈希表的key
    • 窗口每次向右滑動(dòng)一個(gè)字符,左邊的兩個(gè) bit 滑出,右邊滑入兩個(gè)新的 bit

代碼

class Solution {
public:
    // vector<string> findRepeatedDnaSequences(string s) {
    //     int n = s.size();
    //     map<string, int> maps;
    //     for(int i = 0; i <= n-10; i++){
    //         maps[s.substr(i, 10)]++;
    //     }
    //     vector<string> ret;
    //     for(auto it : maps){
    //         if(it.second > 1){
    //             ret.push_back(it.first);
    //         }
    //     }
    //     return ret;
    // }

    vector<string> findRepeatedDnaSequences(string s){
        int n = s.size();
        map<char, int> maps = {{'A', 0}, {'T', 1}, {'C', 2}, {'G', 3}};
        map<int, int> cnt;
        int x = 0;
        for(int i = 0; i < 10-1; i++){
            x = (x<<2) | maps[s[i]];
        }
        vector<string> ret;
        for(int i = 0; i <= n-10; i++){
            x = ((x << 2) | maps[s[i + 10 - 1]]) & ((1 << (10 * 2)) - 1);
            if(cnt[x] < 2){
                cnt[x]++;
                if(cnt[x] == 2){
                    ret.push_back(s.substr(i, 10));
                }
            }
        }
        return ret;
    }
};

到了這里,關(guān)于力扣_字符串10—重復(fù)的DNA序列的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【力扣·每日一題】2182.構(gòu)造限制重復(fù)的字符串(模擬 貪心 優(yōu)先隊(duì)列 C++ Go)

    【力扣·每日一題】2182.構(gòu)造限制重復(fù)的字符串(模擬 貪心 優(yōu)先隊(duì)列 C++ Go)

    題目鏈接 給你一個(gè)字符串 s 和一個(gè)整數(shù) repeatLimit ,用 s 中的字符構(gòu)造一個(gè)新字符串 repeatLimitedString ,使任何字母 連續(xù) 出現(xiàn)的次數(shù)都不超過 repeatLimit 次。你不必使用 s 中的全部字符。 返回 字典序最大的 repeatLimitedString 。 如果在字符串 a 和 b 不同的第一個(gè)位置,字符串 a 中

    2024年01月17日
    瀏覽(21)
  • 算法學(xué)習(xí)——LeetCode力扣字符串篇

    算法學(xué)習(xí)——LeetCode力扣字符串篇

    344. 反轉(zhuǎn)字符串 - 力扣(LeetCode) 描述 編寫一個(gè)函數(shù),其作用是將輸入的字符串反轉(zhuǎn)過來。輸入字符串以字符數(shù)組 s 的形式給出。 不要給另外的數(shù)組分配額外的空間,你必須原地修改輸入數(shù)組、使用 O(1) 的額外空間解決這一問題。 示例 示例 1: 輸入:s = [“h”,“e”,“l(fā)”

    2024年02月20日
    瀏覽(21)
  • 【LeetCode每日一題】2182. 構(gòu)造限制重復(fù)的字符串

    【LeetCode每日一題】2182. 構(gòu)造限制重復(fù)的字符串

    2024-1-13 2182. 構(gòu)造限制重復(fù)的字符串 思路: 按照字符出現(xiàn)次數(shù)從高到低的順序進(jìn)行重復(fù),通過維護(hù)一個(gè)指針 j 來尋找下一個(gè)非零出現(xiàn)次數(shù)的字母。同時(shí),利用 StringBuilder 對(duì)象可以高效地構(gòu)建字符串,避免頻繁的字符串拼接操作 首先,創(chuàng)建一個(gè)長度為26的數(shù)組 cnt ,用于統(tǒng)計(jì)字

    2024年01月18日
    瀏覽(25)
  • LeetCode:459. 重復(fù)的子字符串 —【2、KMP算法】

    LeetCode:459. 重復(fù)的子字符串 —【2、KMP算法】

    ??道阻且長,行則將至。?? ??算法,不如說它是一種思考方式?? 算法專欄: ????123 題目描述 :給定一個(gè)非空的字符串 s ,檢查是否可以通過由它的一個(gè)子串重復(fù)多次構(gòu)成。 來源:力扣(LeetCode) 難度: 簡單 提示: 1 = s.length = 104 s 由小寫英文字母組成 示例 1: 輸入:

    2024年02月04日
    瀏覽(29)
  • 【leetcode 力扣刷題】字符串匹配之經(jīng)典的KMP?。?!

    【leetcode 力扣刷題】字符串匹配之經(jīng)典的KMP?。?!

    以下是能用KMP求解的算法題,KMP是用于字符串匹配的經(jīng)典算法【至今沒學(xué)懂………啊啊啊】 題目鏈接:28. 找出字符串中第一個(gè)匹配項(xiàng)的下標(biāo) 題目內(nèi)容: 題意還是很好理解的,要在字符串haystack中查找一個(gè)完整的needle,即字符串匹配。 暴力求解就是用 兩層循環(huán) :haystack從第

    2024年02月09日
    瀏覽(33)
  • 【leetcode 力扣刷題】字符串翻轉(zhuǎn)合集(全部反轉(zhuǎn)///部分反轉(zhuǎn))

    【leetcode 力扣刷題】字符串翻轉(zhuǎn)合集(全部反轉(zhuǎn)///部分反轉(zhuǎn))

    題目鏈接:344. 反轉(zhuǎn)字符串 題目內(nèi)容: 題目中重點(diǎn)強(qiáng)調(diào)了必須 原地修改 輸入數(shù)組,即不能新建一個(gè)數(shù)組來完成字符串的反轉(zhuǎn)。我們注意到: 原來下標(biāo)為0的,反轉(zhuǎn)后是size - 1【原來下標(biāo)是size - 1的,反轉(zhuǎn)后是0】; 原來下標(biāo)是1的,反轉(zhuǎn)后是size - 2【原來下標(biāo)是size -2的,反轉(zhuǎn)后

    2024年02月11日
    瀏覽(33)
  • 代碼隨想錄 Leetcode459. 重復(fù)的子字符串(KMP算法)

    代碼隨想錄 Leetcode459. 重復(fù)的子字符串(KMP算法)

    ? ? ? ? 此解法讀者需要了解什么是KMP算法以及KMP算法中next數(shù)組的具體含義才能理解 ? ? ? ? 因?yàn)樵贙MP算法的next數(shù)組中,next[index]表示 i ndex之前的最大長度的相同前綴后綴值 ,那么要判斷整個(gè)字符串中是否由重復(fù)字串構(gòu)成,只需要以下兩個(gè)條件: ? ? ? ? 1.next[n - 1] !=

    2024年01月19日
    瀏覽(100)
  • 代碼隨想錄 Leetcode1047. 刪除字符串中的所有相鄰重復(fù)項(xiàng)

    代碼隨想錄 Leetcode1047. 刪除字符串中的所有相鄰重復(fù)項(xiàng)

    ? ? ? ? 時(shí)間復(fù)雜度高 ? ? ? ? 寫完代碼多思考怎么優(yōu)化

    2024年01月22日
    瀏覽(28)
  • (動(dòng)態(tài)規(guī)劃) 劍指 Offer 48. 最長不含重復(fù)字符的子字符串 ——【Leetcode每日一題】

    (動(dòng)態(tài)規(guī)劃) 劍指 Offer 48. 最長不含重復(fù)字符的子字符串 ——【Leetcode每日一題】

    難度:中等 請(qǐng)從字符串中找出一個(gè)最長的不包含重復(fù)字符的子字符串,計(jì)算該最長子字符串的長度。 示例 1: 輸入: “abcabcbb” 輸出: 3 解釋: 因?yàn)闊o重復(fù)字符的最長子串是 “abc”,所以其長度為 3。 示例 2: 輸入: “bbbbb” 輸出: 1 解釋: 因?yàn)闊o重復(fù)字符的最長子串是 “b”,所

    2024年02月11日
    瀏覽(26)
  • (棧和隊(duì)列) 1047. 刪除字符串中的所有相鄰重復(fù)項(xiàng) ——【Leetcode每日一題】

    (棧和隊(duì)列) 1047. 刪除字符串中的所有相鄰重復(fù)項(xiàng) ——【Leetcode每日一題】

    難度:簡單 給出由小寫字母組成的字符串 S , 重復(fù)項(xiàng)刪除操作 會(huì)選擇兩個(gè)相鄰且相同的字母,并刪除它們。 在 S 上反復(fù)執(zhí)行重復(fù)項(xiàng)刪除操作,直到無法繼續(xù)刪除。 在完成所有重復(fù)項(xiàng)刪除操作后返回最終的字符串。答案保證唯一。 示例: 輸入 :“abbaca” 輸出 :“ca” 解釋

    2024年02月08日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包