【中等】算法nodeJs:DNA序列

88 阅读1分钟

描述

一个 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比例最高的子串,如果有多个则输出第一个的子串

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    let line = await readline();
    let n = Number(await readline());
    const sliceArr = [];
    for (let i = 0; i < line.length - n + 1; i++) {
        let str = line.slice(i, i + n);
        let C = (str.match(/[C]/g) || []).length;
        let G = (str.match(/[G]/g) || []).length;
        sliceArr.push([str, C + G]);
    }
    sliceArr.sort((a, b) => b[1] - a[1]);
    console.log(sliceArr[0][0]);
})();