题解 | DNA序列,动态规划

DNA序列

https://www.nowcoder.com/practice/e8480ed7501640709354db1cc4ffd42a

#include <iostream>
#include <vector>
using namespace std;

int main() {
    // gc长度用dp,相减
    // 比例
    string s;cin>>s;
    int n;cin>>n;
    vector<int>dp(s.size(),0);
    int ratio=0;
    string s2;
    if(s[0]=='G'||s[0]=='C')dp[0]=1;
    for(int i=1;i<s.size();i++){
        if(s[i]=='G'||s[i]=='C')dp[i]=dp[i-1]+1;
        else dp[i]=dp[i-1];
        if(i>=n-1){
            if((dp[i]-dp[i-n])>ratio){
                s2=s.substr(i-n+1,n);
                ratio=dp[i]-dp[i-n];
            }
        }
    }
    cout<<s2<<endl;
    if(n>s.size())cout<<s<<endl;

}
// 64 位输出请用 printf("%lld")

一开始想用双指针,后来发现子串长度是固定的,那直接-n不就完了吗?比例也不用算,n是固定的。直接动态规划计数,然后比较。唯一问题是substr用的比例有点高,其实可以多用一个int 储存i的,最后再substr,才想起来,懒得改了。

全部评论

相关推荐

站队站对牛:进度也算很慢的了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务