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(''); }
对不起,第三种解法我没看懂。