JavaScript处理HackerRank输入时多输出一个-1的问题求助
问题排查与修复
问题根源
HackerRank平台的输入通常会在最后一行末尾附带额外换行符,导致input.split("\n")生成的数组最后多出一个空字符串元素。你的代码用slice(1)截取后,会把这个空行也纳入处理,最终多输出一个-1。而Codepen的输入没有这个额外换行,所以运行正常。
另外,原代码的正则逻辑冗余且边界判断存在疏漏,比如判断首尾均为hackerrank的正则写得过于复杂,容易引发匹配歧义。
修复方案
1. 过滤空行,排除无效输入
在slice(1)之后添加过滤逻辑,去掉空行:
const processData = (input) => input .split("\n") .slice(1) .filter(line => line.trim() !== '') // 过滤空行,避免处理无效内容 .map((line) => { const startsWithHackerRank = /^hackerrank\b/.test(line); const endsWithHackerRank = /\bhackerrank$/.test(line); if (startsWithHackerRank && endsWithHackerRank) { console.log(0); } else if (startsWithHackerRank) { console.log(1); } else if (endsWithHackerRank) { console.log(2); } else { console.log(-1); } });
2. 简化逻辑,避免正则歧义
把嵌套三元表达式拆分为清晰的条件判断,用简单正则分别匹配开头和结尾:
^hackerrank\b:匹配以hackerrank作为开头完整单词的行\bhackerrank$:匹配以hackerrank作为结尾完整单词的行
单独一行hackerrank会同时满足两个条件,输出0,完全符合题目要求。
验证效果
用你的输入示例测试,修复后的代码会正确输出:
2 1 0 -1
在HackerRank平台也不会出现额外的-1输出。
内容的提问来源于stack exchange,提问作者mongu
相关产品推荐
相关产品推荐

