面试中遇到的笔试题,记录一下~
题目:
1.写一个方法,统计字符串中出现的字母及出现次数。
比如:入参abcAAAabc
返回:a:2,b:2,c:2,A:3(示形式不限,但是结果中要能清晰感知出现字母及出现的次数)
const str = 'abcAAAabc';
let countObj = {}; // 用来统计字符串中出现的字母及次数// 循环字符串
for (let i = 0; i < str.length; i++) {// 将字符串中出现的字母设置为countObj的key名let key = str[i];// 将字符串中出现的字符(即字母)和字符出现次数存入countObj中if (countObj[key]) {countObj[key]++;} else {countObj[key] = 1;}
}
console.log('countObj:', countObj); // countObj:{a: 2, b: 2, c: 2, A: 3}// 输出统计的字母及出现次数
for (const key in countObj) {console.log(`字母${key}-出现${countObj[key]}次`);
}
2./**
* 说明:计算多个区间的交集。
* 区间应长度为2的数组数组表示,如[2, 5]表示区间2到5(包括2到5);
* 区间不限定方向,如[5, 2]等同与[2, 5];
* 实现`getIntersection`,可接收多个区间,并返回所有区间的交集(用区间表示),如空集用null表示
* 示例:
* getIntersection([5, 2], [4, 9], [3, 6]); // [4, 5]
* getIntersection([1, 7], [8, 9]); // null
*/
function getIntersection(...args) { // 剩余运算符 [[5, 2], [4, 9], [3, 6]]let fArr = []; // 存储所有输入数组的第一位数字,输出新的数组let lArr = []; // 存储所有输入数组的第二位数字,输出新的数组// 遍历输入数组for(let item of args) {item.sort((a,b)=>{ return a-b }) // 将输入数组排序,数组第一个数小于数组第二个数fArr.push(item[0]) // 将第一个下标放到数组fArr中lArr.push(item[1]) // 将第二个下标放到数组lArr中}console.log('fArr:', fArr); // [2, 4, 3]console.log('lArr:', lArr); // [5, 9, 6]let fMax = Math.max(...fArr); // 选出第一个下标比较大的值let lMin = Math.min(...lArr); // 选出第二个下标比较小的值console.log('fMax:', fMax); // 4console.log('lMin:', lMin); // 5if(fMax > lMin) { // 如果第一个数字大于第二个数字,无交集return null;} else if(fMax === lMin) { // 如果第一个数字等于第二个数字,交集为当前值return fMax;} else {return [fMax,lMin]; // 有交集情况}}console.log(getIntersection([5, 2], [4, 9], [3, 6])); // [4, 5]