codewars.DNA题目几种解法分析(字符串替换)

题干:

意思就是字符串替换,“A”与"C"配对,"T"与"G"配对,DNA不为空。

解法一:我的解法,用for循环遍历字符串,按照配对规则进行一一判断,之后输出新的字符串。

function DNAStrand(dna){
  //your code here
  var len=dna.length;
  var str1="";
  for(i=0;i<len;i++){		
    if(dna[i]==="A"){
        str1 =str1+"T";		
    }else if(dna[i]==="T"){
        str1 =str1+"A";
    }else if(dna[i]==="C"){
        str1 =str1+"G";
    }else if(dna[i]==="G"){
        str1 =str1+"C";
    }else{
	str1 =str1+dna[i];
  }
  }
	return str1;
}
DNAStrand("GTAT");

  但是我们来看看它的运行时间:371ms

解法二:最高票解法如下,

function DNAStrand(dna) {
  return dna.replace(/./g, function(c) {
    return DNAStrand.pairs[c]
  })
}

DNAStrand.pairs = {
  A: 'T',
  T: 'A',
  C: 'G',
  G: 'C',
}

  字符串对象共有4个可以使用正则表达式:match(),replace(),search()和split()。

String.prototype.replace调用RegExp.prototype[Symbol.replace]

  replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

运行时间为:338ms

解法三:使用es6的map

var pairs = {'A':'T','T':'A','C':'G','G':'C'};

function DNAStrand(dna){
  return dna.split('').map(function(v){
     return pairs[v] 
   }).join('');
}

  对不起,第三种解法我没看懂。

posted @ 2018-03-15 20:49  lasia962  阅读(552)  评论(0编辑  收藏  举报