算法面试题
1.计算一个字符串中出现重复字符的个数(不区分大小写)?
function duplicateCount (text) {
return (text.toLowerCase().split('').sort().join('').match(/(.)\1+/g) || []).length
}
2.已知DNA是双链结构,由4种碱基对构成,A和T互相配对,C和G互相配对,若有任意一条DNA单链,求配对的单链?
function DNAResolve (dna) {
return dna.replace(/(A|T|C|G)/gi, function($1){
return {
A: 'T',
T: 'A',
C: 'G',
G: 'C'
}[$1]
})
}
3.写一个将字符串转驼峰式的函数
function camelCase (str) {
return str.split(' ').map(v => v.replace(/\b(\w)/g, function (fl) {
return fl.toUpperCase()
})).join('')
}
camelCase('hello world') // 'HelloWorld'
4.求泰波那契数列
已知斐波那契数列规律为[1, 1, 2, 3, 5…], 而泰波那契数列是从第4个元素开始,后面每个元素都是前3个元素之和,请写一个有2个参数的函数,参数1是初始化数组,参数2是该函数返回泰波那契数组的长度,返回值是泰波那契数列。
function tribonacci(signature,n){
for (var i = 0; i < n-3; i++) {
signature.push(signature[i] + signature[i+1] + signature[i+2]);
}
return signature.slice(0, n);
}
tribonacci([1,1,1],1) // [1]
tribonacci([0,2,7],2) // [0, 2]
tribonacci([1,1,1],10) // [1,1,1,3,5,9,17,31,57,105]
5.请写出一个判断质数的函数,返回布尔值
function isPrime(num) {
for (let i = 2; i < num; i++) {
if (num % 2 === 0) {
return false
}
}
return num >= 2
}