js程序-- DNA相关问题

1.题目描述:

DNA分子是以4种脱氧核苷酸为单位连接而成的长链,这4种脱氧核苷酸分别含有A,T,C,G四种碱基。碱基互补配对原则:A和T是配对的,C和G是配对的。如果两条碱基链长度是相同的并且每个位置的碱基是配对的,那么他们就可以配对合成为DNA的双螺旋结构。现在给出两条碱基链,允许在其中一条上做替换操作:把序列上的某个位置的碱基更换为另外一种碱基。问最少需要多少次让两条碱基链配对成功
输入描述:
输入包括一行:
包括两个字符串,分别表示两条链,两个字符串长度相同且长度均小于等于50。

输出描述:
输出一个整数,即最少需要多少次让两条碱基链配对成功

输入例子1:
ACGT TGCA

输出例子1:
0

readline = require('readline');
rl = readline.createInterface({
    input:process.stdin,
    output:process.stdout,
})

rl.on('line',function(line){
    
    var first = line.split(' ')[0];
    var second = line.split(' ')[1];
    console.log(num(first,second))
    
})

function num(first,second){
    var n=0;
    for(var i=0;i<first.length;i++){
        if(matchchar(first[i],second[i])){
            
        }else{
            n++;
        }
        
        
    }
    
    return n;
    
}

function matchchar(char1,char2){
    if((char1=="A"&&char2=="T")||(char1=="T"&&char2=="A")||(char1=="C"&&char2=="G")||(char1=="G"&&char2=="C")){
        return true;
    }else{
        return false;
    }
    
}

2 题目描述:DNA的碱基为“A”“T”“”C“”“”G“”,给你一串“A”~“Z”组成的字符串,请输出最长的相邻碱基的长度

例如:输入ABATV,输出为2

var readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    terminal:false
});

var  str = '';
rl.on('line', function(line){ // javascript每行数据的回调接口
     // 测试用例第一行读取n
        str = line.trim();
        // 输出结果
        console.log(maxLengthDNA(str));
        // 记录当前读取的行数
        str = '';
});

function maxLengthDNA(str){
    var strarr = str.split("");
    var arrLength = 0;
    var newarrLength = 0;

    if(str.indexOf('A')!=-1||str.indexOf('T')!=-1||str.indexOf('C')!=-1||str.indexOf('G')!=-1){
        newarrLength = 1;
        var i = 0;
        for(i;i<strarr.length;i++){
            var arr = [];
            if(strarr[i]=='A'||strarr[i]=='T'||strarr[i]=='C'||strarr[i]=='G'){
                arr.push(strarr[i]);
                for(var j=i+1;j<strarr.length;j++){
                   if(strarr[j]=='A'||strarr[j]=='T'||strarr[j]=='C'||strarr[j]=='G'){
                        arr.push(strarr[j]);
                        newarrLength = arr.length;
                        i=j;

                    }else{
                        if(newarrLength<arrLength){
                            newarrLength = arrLength;
                        }else{
                            arrLength =  newarrLength;
                        }
                        break;
                    }
                }
            }
        }
    }

    return newarrLength;
}

若后续有更好的方法,再更!!!

 

posted @ 2017-07-25 21:22  艾亚495  阅读(373)  评论(0编辑  收藏  举报