牛客真题(24)-DNA序列

今天继续刷牛客真题,求最短子序列。

分析:
刚刚开始以为需要判断的是‘A’、‘C’、‘G’、‘T’、‘AA’、‘C’、‘GG’、‘TT’,这种类型,但是题目说的是长度为2的全部,所以应该包含’AC’这种,因此可以通过找到长度为n的不同子字符串个数是否等于4的n次方来判断。其中判断不同的子字符串的时候就需要用到set函数来保证关键字唯一。

问题:
1、C++中求子字符串的时候可以使用s.substr(begin,length);
2、set添加元素使用s.insert();
3、Python中set函数的使用是s.add();

附上C++代码:

#include<iostream>
#include<set>
#include<math.h>
#include<string>
using namespace std;
int main()
{
    string s;
    getline(cin,s);
    for(int i=1;i<=s.length();++i)
    {
        set<string> t;
        for(int j=0;j<=s.length()-i;++j)
            t.insert(s.substr(j,i));
        if(t.size()<(int)pow(4,i))
        {
            cout<<i<<endl;
            break;
        }
    }
    return 0;
}

附上Python代码1:

s=input()

for i in range(1,len(s)+1):
    l=[]
    l=set(l)
    for j in range(0,len(s)-i+1):
        l.add(s[j:j+i])
    if len(l)<(4**i):
        print(i)
        break;

另外可以通过组合的方式,将每种组合列举出来,并且判断每种组合是否在原字符串中。

附上Python代码2:

s=input()

def f(s):
    t=['']
    for i in range(len(s)):
        l=[]
        for item in t:
            for char in ['A','C','G','T']:
                if item+char not in s:
                    return i+1
                l.append(char+item)
        t=l
        
print(f(s))

猜你喜欢

转载自blog.csdn.net/JerryZengZ/article/details/89468517
今日推荐