Codesignal最长单词任务代码仅过9/10测试,求排查原因
问题分析与修正方案
你的代码问题出在正则表达式的选择上:
- 你用的
/\w+/g中,\w在JavaScript正则里代表字母、数字、下划线(等价于[A-Za-z0-9_]),不符合题目里"单词是连续英文字母序列"的定义。 - 在测试用例
"ab-CDE-fg_hi"中,这个正则会把fg_hi识别成一个完整单词(长度5),但实际上下划线不属于字母,fg和hi是两个独立的短单词,此时最长的纯字母单词是CDE(长度3),这就是你的代码和预期输出不符的原因。
修正后的代码
把正则替换为仅匹配大小写英文字母的/[a-zA-Z]+/g,就能正确提取所有符合要求的单词:
function solution(text) { let words = text.match(/[a-zA-Z]+/g); let ml = Math.max(...words.map(el=>el.length)) for(let i = 0; i < words.length; i++){ if(words[i].length == ml){ return words[i] } } }
额外说明
- 这个正则会精准匹配所有连续的英文字母序列,不管大小写,完全符合题目对"单词"的定义。
- 若输入字符串可能不存在任何字母,
match会返回null,此时Math.max会报错,但题目应该保证输入至少包含一个单词,所以暂时无需处理该边界场景。
内容的提问来源于stack exchange,提问作者user22884804
相关产品推荐
相关产品推荐

