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')); }