首页 > 其他分享 >187

187

时间:2023-11-05 15:47:12浏览次数:21  
标签:DNA zixulies list re 187 str zixulie

DNA序列 由一系列核苷酸组成,缩写为 'A''C''G' 和 'T'.。

  • 例如,"ACGAATTCCG" 是一个 DNA序列 。

在研究 DNA 时,识别 DNA 中的重复序列非常有用。

给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。

示例 1:

输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"
输出:["AAAAACCCCC","CCCCCAAAAA"]

思路:直接暴力遍历

第一遍
class Solution(object):
    def findRepeatedDnaSequences(self, s):
        """
        :type s: str
        :rtype: List[str]
        """
        zixulies = list()
        length = len(s)
        for i in range(length-10):
                zixulies.append(s[i:i+10])
        ans = list(set(zixulies))
        re = list()
        for zixulie in ans:
            if zixulies.count(zixulie)>1:
                re.append(zixulie)
        return re

对字符串切片的长度、循环的起止 把握有误 WA

 

第二遍

class Solution(object):
    def findRepeatedDnaSequences(self, s):
        """
        :type s: str
        :rtype: List[str]
        """
        zixulies = list()
        length = len(s)
        for i in range(length-9):
                zixulies.append(s[i:i+10])
        ans = list(set(zixulies))
        re = list()
        for zixulie in ans:
            if zixulies.count(zixulie)>1:
                re.append(zixulie)
        return re

31个测试用例过了30个 超时了

 

第三遍 把第二次的代码给WXYY让他优化时间复杂度

class Solution(object):
    def findRepeatedDnaSequences(self, s):
        """
        :type s: str
        :rtype: List[str]
        """
        dna_sequences = set()  
        seen = set()  
        for i in range(len(s) - 9):  
            sequence = s[i:i+10]  
            if sequence in seen:  
                dna_sequences.add(sequence)  
            seen.add(sequence)  
        return list(dna_sequences)

 

标签:DNA,zixulies,list,re,187,str,zixulie
From: https://www.cnblogs.com/LYoungH/p/17810570.html

相关文章

  • CF1874F Jellyfish and OEIS 题解
    题目链接不明白出题人的脑回路是不是被宇宙射线改变过/jy。题目给出了若干个区间,要我们计算满足每个区间都不是对应下标的排列的数量,正着计算不满足要求的数量是困难的,我们将其容斥,转化为钦定一些区间要求其必须满足它是对应下标的排列,在下文中,我们称这样的区间为一个约束。我......
  • CF1872E Data Structures Fan 题解
    CF1872E翻译请把数据加强到\(\sumn\leq10^8\)后重新思考。我们维护全局中被标记的所有点的异或和。发现对于一次\(1\)操作,相当于让答案异或上区间的\(a_i\)异或和,因为这会让被标记的点变成没被标记的,而没被标记的点会产生贡献。查询的话直接查询即可复杂度......
  • CF1879C Make it Alternating
    传送门设\(f_{i,0}\)表示将\([1,i]\)位变成以\(0\)结尾的字符串的最小步数。\(f_{i,1}\)表示将\([1,i]\)位变成以\(1\)结尾的字符串的最小步数。\(f_{i,2}\)表示将\([1,i]\)位变成空字符串的最小步数。转移的时候分类讨论一下第\(i\)位的选取与否,注意要求方案数,所以要注意分讨......
  • CF1875
    AJellyfishandUndertale这个直接顺着选就好了,能过#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintmaxn=105;intx[maxn];intt; inta,b,n;signedmain(){ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>t;......
  • CF1878B题解
    CF1878BAleksaandStack题目翻译给定\(n\),试构造一个长度为\(n\)的严格上升正整数序列\(a_1,a_2,a_3,...,a_n\)使得\(\foralli\in[3,n],(a_{i-1}+a_{i-2})\nmid3a_i\)。单个测试点内包含多组测试数据。思路拿到题目,发现不好一个数一个数地构造,考虑......
  • CF1873B题解
    这题其实可以数学方法差小积大解决。差越小积越大,那肯定是让最小的数加一啦。将所有数的积除以最小值再乘上最小值加一。#include<bits/stdc++.h>usingnamespacestd;signedmain(){ intT; cin>>T; while(T--){ longlongcnt=0,n,a[10],minn=LONG_LONG_MAX,ans=1; c......
  • CF1879F Last Man Standing 题解
    原题翻译观察题目,容易发现当题目难度为\(x\)时一个OIer存活时间为\(h_i\lceil\frac{a_i}{x}\rceil\)发现\(a_i\)较小,所以我们先考虑暴力枚举\(x\in[1,\maxa_i]\),然后把原数组按\(a_i\)排个序,对于每组\(\lceil\frac{a_i}{x}\rceil\)相同的部分统一计算他......
  • CF1873E Building an Aquarium 题解
    这题看到第一眼就是二分。单调性二分最关键的东西是单调性在哪。单调性是如果高度越高,需要的水就越多,高度越矮,要用的水越少。不难得出代码:check函数:intcheck(intmid){ intsum=0; for(inti=1;i<=n;i++){ sum+=max(0ll,mid-a[i]); } if(sum<=x)returnsum; elsere......
  • CF1873F Money Trees
    CF1873FMoneyTrees双指针好题,但是我用的队列(考虑先找出所有极长的、满足任意一个数都能被它后面的那个数整除的连续段。显然这个操作可以在\(\mathcal{O}(n)\)的时间复杂度内完成。求出每个极长连续段的答案,取\(\max\)即为最终答案。那么现在的问题就是求一个数列中,满......
  • CF1872B The Corridor or There and Back Again
    CF1872BTheCorridororThereandBackAgain观察第二组样例的解释,注意这句话:“第二个陷阱限制了你”。这启发我们计算经过每个陷阱之后最多还能向前走到哪里,然后取\(\min\)得到答案。现在的问题是如何求出每个陷阱限制的最远可到达点。由于要求折返,因此对于第\(i\)个......