187. 重復的DNA序列

187. 重復的DNA序列

所有 DNA 都由一系列縮寫為 ‘A’,‘C’,‘G’ 和 ‘T’ 的核苷酸組成,例如:“ACGAATTCCG”。在研究 DNA 時,識別 DNA 中的重復序列有時會對研究非常有幫助。

編寫一個函數來找出所有目標子串,目標子串的長度為 10,且在 DNA 字符串 s 中出現次數超過一次。

  • 示例 1:

輸入:s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”
輸出:[“AAAAACCCCC”,“CCCCCAAAAA”]

  • 示例 2:

輸入:s = “AAAAAAAAAAAAA”
輸出:[“AAAAAAAAAA”]

解題思路

使用滑動窗口+位運算

  1. 使用Map可以在O(1)的時間復雜度內獲得目標子串出現的次數
  2. 但是因為0 <= s.length <= 100000,因此如果使用map統計長度為 10的目標子串,空間復雜度非常高。但是因為所有 DNA 都由一系列縮寫為 ‘A’,‘C’,‘G’ 和 ‘T’ 的核苷酸組成,所以我們可以使用2位二進制表示一個字符,那么長度為10的目標子串也就只需要一個32位的整型來表示
  3. 樸素的解法中,需要枚舉所有長度為10的目標子串,時間復雜度為o(10*s.length),我們可以使用滑動窗口,維護窗口內的字符串組成,時間復雜度為o(s.length)

代碼

class Solution {public  String decode(int tar) {StringBuilder sb = new StringBuilder();for (int i=0;i<10;i++){int cur=tar&3;if (cur==0)sb.append('A');else if(cur==1)sb.append('C');else if(cur==2)sb.append('G');else sb.append('T');tar>>=2;}return sb.reverse().toString();}public  int count(char c) {if (c=='A')return 0;else if(c=='C')return 1;else if(c=='G')return 2;else return 3;}public  List<String> findRepeatedDnaSequences(String s) {ArrayList<String> strings = new ArrayList<>();Map<Integer,Integer> map=new HashMap<>();int cur=0,l=0,r=0,n=s.length(),mask=(1<<20)-1;while (r<n){if (r-l>=10){map.put(cur,map.getOrDefault(cur,0)+1);cur-=(count(s.charAt(l++))<<18);}cur<<=2;cur+=count(s.charAt(r++));}map.put(cur,map.getOrDefault(cur,0)+1);for (Map.Entry<Integer, Integer> entry : map.entrySet()) {if (entry.getValue()>1)strings.add(decode(entry.getKey()));}return strings;}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390002.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390002.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390002.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

牛客網_Go語言相關練習_選擇題(2)

注&#xff1a;題目來源均出自牛客網。 一、選擇題 Map&#xff08;集合&#xff09;屬于Go的內置類型&#xff0c;不需要引入其它庫即可使用。 Go-Map_菜鳥教程 在函數聲明中&#xff0c;返回的參數要么都有變量名&#xff0c;要么都沒有。 C選項函數聲明語法有錯誤&#xff0…

機器學習模型部署_9月版部署機器學習模型

機器學習模型部署每月版 (MONTHLY EDITION) Often, the last step of a Data Science task is deployment. Let’s say you’re working at a big corporation. You’re building a project for a customer of the corporation and you’ve created a model that performs well…

352. 將數據流變為多個不相交區間

352. 將數據流變為多個不相交區間 給你一個由非負整數 a1, a2, …, an 組成的數據流輸入&#xff0c;請你將到目前為止看到的數字總結為不相交的區間列表。 實現 SummaryRanges 類&#xff1a; SummaryRanges() 使用一個空數據流初始化對象。void addNum(int val) 向數據流中…

Java常用的八種排序算法與代碼實現

排序問題一直是程序員工作與面試的重點&#xff0c;今天特意整理研究下與大家共勉&#xff01;這里列出8種常見的經典排序&#xff0c;基本涵蓋了所有的排序算法。 1.直接插入排序 我們經常會到這樣一類排序問題&#xff1a;把新的數據插入到已經排好的數據列中。將第一個數和第…

熊貓ai智能機器人量化_機器學習中的熊貓是什么

熊貓ai智能機器人量化Machine learning is a complex discipline. The implementation of machine learning models is now far much easier than it used to be, this is as a result of Machine learning frameworks such as pandas. Wait!! isnt panda an animal? As I rec…

441. 排列硬幣

441. 排列硬幣 你總共有 n 枚硬幣&#xff0c;并計劃將它們按階梯狀排列。對于一個由 k 行組成的階梯&#xff0c;其第 i 行必須正好有 i 枚硬幣。階梯的最后一行 可能 是不完整的。 給你一個數字 n &#xff0c;計算并返回可形成 完整階梯行 的總行數。 示例 1&#xff1a;…

調用百度 Echarts 顯示重慶市地圖

因為 Echarts 官方不再提供地圖數據的下載&#xff0c;在這里保存一份&#xff0c;供日后使用&#xff0c;重慶地圖數據的 JSON 文件在 CSDN 上下載。 <!DOCTYPE html> <html style"height: 100%"><head><meta charset"utf-8"><…

JEESZ-SSO解決方案

2019獨角獸企業重金招聘Python工程師標準>>> 第一節&#xff1a;單點登錄簡介 第一步&#xff1a;了解單點登錄 SSO主要特點是: SSO應用之間使用Web協議(如HTTPS)&#xff0c;并且只有一個登錄入口. SSO的體系中有下面三種角色: 1) User(多個) 2) Web應用(多個) 3) …

女朋友天天氣我怎么辦_關于我的天氣很奇怪

女朋友天天氣我怎么辦帶有扭曲的天氣應用 (A Weather App with a Twist) Is My Weather Weird?? is a weather app with a twist — it offers a simple answer to a common question we’ve all asked. To do this we look at how often weather like today’s used to happ…

Java中length,length(),size()的區別

&#xff08;一&#xff09;區別&#xff1a; ①length&#xff1a;用于算出數組的長度。 ②length&#xff08;&#xff09;&#xff1a;用于找出字符串的長度。 ③size&#xff08;&#xff09;&#xff1a;用于找出泛型集合的元素個數。轉載于:https://www.cnblogs.com/not-…

5895. 獲取單值網格的最小操作數

5895. 獲取單值網格的最小操作數 給你一支股票價格的數據流。數據流中每一條記錄包含一個 時間戳 和該時間點股票對應的 價格 。 不巧的是&#xff0c;由于股票市場內在的波動性&#xff0c;股票價格記錄可能不是按時間順序到來的。某些情況下&#xff0c;有的記錄可能是錯的…

為什么要用Redis

最近閱讀了《Redis開發與運維》&#xff0c;非常不錯。這里對書中的知識整理一下&#xff0c;方便自己回顧一下Redis的整個體系&#xff0c;來對相關知識點查漏補缺。我按照五點把書中的內容進行一下整理&#xff1a;為什么要選擇Redis&#xff1a;介紹Redis的使用場景與使用Re…

第一次馬拉松_成為數據科學家是一場馬拉松而不是短跑

第一次馬拉松Since Data Science became the “Sexiest Job of the 21st Century” the interest in the field has grown tremendously. With it so have the courses available to gain the necessary knowledge. As great as this is, the downside is a field marketed as …

273. 整數轉換英文表示

273. 整數轉換英文表示 將非負整數 num 轉換為其對應的英文表示。 示例 1&#xff1a;輸入&#xff1a;num 123 輸出&#xff1a;"One Hundred Twenty Three" 示例 2&#xff1a;輸入&#xff1a;num 12345 輸出&#xff1a;"Twelve Thousand Three Hundred…

Java-運算符

算術運算符 加法 相加運算符兩側的值- 減法 左操作數減去右操作數* 乘法 相乘操作符兩側的值/ 除法 左操作數除以右操作數&#xff08;int類型的數相除時&#xff0c;會得到int類型的值&#xff0c;如果結果有小數&#xff0c;則小數部分會被舍棄&#xff09;% 模余運算&…

區塊鏈開發公司談區塊鏈在商業上的應用

對于近期正受科技界和資本市場關注的區塊鏈行業&#xff0c;一句話概括說如果互聯網技術解決的是通訊問題的話&#xff0c;區塊鏈技術解決的是信任問題&#xff0c;其在商業領域應用如何呢&#xff1f;我們來從兩個方面去進行剖析。 第一方面&#xff0c;區塊鏈技術可以解決基礎…

ORACLE1.21 PLSQL 01

-- 有了SQL 為什么還需要PL/SQL -- SQL功能很強大&#xff0c;但如果是單1sql語句&#xff0c;沒有流程控制 -- PL/SQL 是什么&#xff1f; --不僅僅實現流程控制&#xff0c;同時保留SQL本身所有的功能 --還提供變量、常量等支持 --提供更多數據類型的支持 --第一&#xff0c;…

云原生數據庫_數據標簽競賽云原生地理空間沖刺

云原生數據庫STAC specification is getting closer to the ver 1.0 milestone, and as such the first virtual Cloud Native Geospatial Sprint is being organized next week. An outreach day is planned on Sep 8th with a series of talks and tutorials for everyone. R…

Linux 下的 hosts文件

2019獨角獸企業重金招聘Python工程師標準>>> hosts 文件 目錄在 /etc/hosts netstat -ntlp //linux 下查看端口 轉載于:https://my.oschina.net/u/2494575/blog/1923074

412. Fizz Buzz

412. Fizz Buzz 給你一個整數 n &#xff0c;找出從 1 到 n 各個整數的 Fizz Buzz 表示&#xff0c;并用字符串數組 answer&#xff08;下標從 1 開始&#xff09;返回結果&#xff0c;其中&#xff1a; answer[i] “FizzBuzz” 如果 i 同時是 3 和 5 的倍數。answer[i] “…