JD前端笔试题代码(18%/91%)
现在应该交完卷了吧,估计和东哥当不了兄弟~
第一题(18%):
function resolve(str) {
let count = 0;
let isCaps = false;
const len = str.length;
for (let i = 0; i < len; i += 1) {
if (/[a-z]/.test(str[i])) {
if (!isCaps) {
count++;
continue;
} else if (i + 1 < len && /[a-z]/.test(str[i + 1])) {
isCaps = false;
}
count += 2;
} else {
if (isCaps) {
count++;
continue;
}
if (i + 1 < len && /[A-Z]/.test(str[i + 1])) {
isCaps = true;
}
count += 2;
}
}
return count;
}
while (n = readInt()) {
if (!n) break;
const str = read_line();
print(resolve(str));
} 第二题(91%) function resolve(nameArr) {
const countCache = {};
let len = nameArr.length;
if (len === 0) return [];
let firstName;
for (let i = 0; i < len; i += 1) {
firstName = nameArr[i].split(' ')[0];
if (!countCache[firstName]) {
countCache[firstName] = {
value: [{
name: nameArr[i],
index: i
}],
count: 0
};
} else {
// index用于计数相同时的排序
countCache[firstName].value.push({
name: nameArr[i],
index: i
});
countCache[firstName].count += 1;
}
}
const sortedFirstNameList = Object.keys(countCache).sort((firstName1, firstName2) => {
return countCache[firstName2].count - countCache[firstName1].count;
});
let currentMaxFirstName = sortedFirstNameList[0];
let currentMaxCount = countCache[currentMaxFirstName].count;
let currentMaxNameArr = countCache[currentMaxFirstName].value;
len = sortedFirstNameList.length;
// console.log(currentMaxNameArr);
let result = [];
for (let i = 1; i < len; i += 1) {
currentMaxFirstName = sortedFirstNameList[i];
// 直接放进数组
if (currentMaxCount > countCache[currentMaxFirstName].count) {
currentMaxNameArr.sort((item1, item2) => item1.index - item2.index);
result = result.concat(currentMaxNameArr.map(item => item.name));
// 下一个姓名列表
currentMaxNameArr = countCache[currentMaxFirstName].value;
currentMaxCount = countCache[currentMaxFirstName].count;
} else {
// 合并计数相同的姓名列表
currentMaxNameArr = currentMaxNameArr.concat(countCache[currentMaxFirstName].value);
}
}
// 由于最后一次currentMaxNameArr可能还没放进result,在这里补上
currentMaxNameArr.sort((item1, item2) => item1.index - item2.index);
result = result.concat(currentMaxNameArr.map(item => item.name));
return result;
}
while (true) {
const nameArr = [];
while (line = read_line()) {
nameArr.push(line);
}
print(resolve(nameArr).join('\n'));
}
查看24道真题和解析