DNA序列(牛客网算法/javascript Node环境)

描述

一个 DNA 序列由 A/C/G/T 四个字母的排列组合组成。 G 和 C 的比例(定义为 GC-Ratio )是序列中 G 和 C 两个字母的总的出现次数除以总的字母数目(也就是序列长度)。在基因工程中,这个比例非常重要。因为高的 GC-Ratio 可能是基因的起始点。

给定一个很长的 DNA 序列,以及限定的子串长度 N ,请帮助研究人员在给出的 DNA 序列中从左往右找出 GC-Ratio 最高且长度为 N 的第一个子串。

DNA序列为 ACGT 的子串有: ACG , CG , CGT 等等,但是没有 AGT , CT 等等

数据范围:字符串长度满足 1≤n≤1000 ,输入的字符串只包含 A/C/G/T 字母

输入描述:

输入一个string型基因序列,和int型子串的长度

输出描述:

找出GC比例最高的子串,如果有多个则输出第一个的子串

javascript 复制代码
//示例1
//输入
ACGT
2
//输出
CG
//说明
ACGT长度为2的子串有AC,CG,GT3个,其中AC和GT2个的GC-Ratio都为0.5,CG为1,故输出CG   

//示例2
//输入
AACTGTGCACGACCTGA
5
//输出
GCACG
//说明
虽然CGACC的GC-Ratio也是最高,但它是从左往右找到的GC-Ratio最高的第2个子串,所以只能输出GCACG。
javascript 复制代码
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

let lines = [];
rl.on('line',function(line){
    lines.push(line);
    if(lines.length === 2){
        let strArr = lines[0].split('');
        let len = parseInt(lines[1]);
        let result = [0, '']
        for(let i=0;i<strArr.length - len + 1;i++){

            let res = strArr.slice(i, i + len);
            
            if(getGC(res)>result[0]){
                result = [getGC(res), res]
            }
        }
        console.log(result[1].join(''))
    }
    
})
function getGC(str){
    let GCcount = 0;
    for(let i=0; i<str.length;i++ ){
        if(str[i] === 'C' || str[i] === 'G'){
            GCcount++
        }
    }
    if(GCcount === 0){
        return 0
    }else{
        return GCcount/str.length
    }
}
相关推荐
bdgtd881784 小时前
动态修补C扩展模块的函数指针有哪些风险?安全的修补方案是什么?
c语言·开发语言·安全
mit6.8244 小时前
8.27 网格memo
c++·算法
jeffery8924 小时前
4056:【GESP2403八级】接竹竿
数据结构·c++·算法
luquinn4 小时前
实现统一门户登录跳转免登录
开发语言·前端·javascript
Forward♞4 小时前
Qt——界面美化 QSS
开发语言·c++·qt
烛阴5 小时前
TypeScript 类型魔法:像遍历对象一样改造你的类型
前端·javascript·typescript
Ghost-Face5 小时前
图论基础
算法
默归5 小时前
分治法——二分答案
python·算法
啃火龙果的兔子6 小时前
js获取html元素并设置高度为100vh-键盘高度
javascript·html·计算机外设
一枝小雨7 小时前
【数据结构】排序算法全解析
数据结构·算法·排序算法