Codewars Longest Palindrome题提交返回-Infinity报错问题咨询
问题原因分析
- 核心问题是代码执行顺序错误:你对
Infinity/-Infinity的判断逻辑写在了读取str.length之后,当输入为数字类型的-Infinity时,代码会先尝试访问数字类型不存在的length属性,直接抛出类型错误,根本不会执行到你的判断分支,也就无法返回0。你本地测试如果传入的是字符串形式的'-Infinity'不会触发报错,但Codewars的测试用例传入的是数字类型的-Infinity,因此触发了该错误。 - 潜在问题:没有提前处理非字符串类型的输入边界,输入为数字、空值等类型时,访问
length都会提前抛出错误。
修复方案
仅需要把边界判断逻辑移到函数最开头即可,修改后代码如下:
function longestPalindrome(str){ // 先做边界判断,再执行后续逻辑 if (str === Infinity || str === -Infinity || typeof str !== 'string') { return 0 } var Palindromes = [], reverser = i => i.split("").reverse().join(""), l = str.length; for (let i = l ; i >= 0; i--){ for(let j = 0; j < l; j++){ temp = str.slice(j, i) if (reverser(temp) === temp){ Palindromes.push(temp) } } } return Math.max(...Palindromes.map(e => e.length)); }
验证说明
调整后输入为数字类型的-Infinity时会直接命中判断返回0,不会触发后续的属性访问报错,同时也兼容了其他非字符串输入的边界情况,完全匹配题目测试用例要求。
内容的提问来源于stack exchange,提问作者untitiledunmastered
相关产品推荐
相关产品推荐

