求助:修复isAlphabet函数逻辑错误,实现正确字母顺序验证
问题分析与修复方案
你的代码存在三个关键问题,导致无法通过测试用例,下面逐一说明并修复:
1. 循环边界错误
原循环条件i < ch.length会导致当i等于字符串最后一个索引时,ch[i+1]为undefined,此时调用charCodeAt()会抛出错误,且这种情况下本就不需要进行比较(没有下一个字符)。正确的循环条件应该是i < ch.length - 1,只遍历到倒数第二个字符,确保每次都有有效的下一个字符可以比较。
2. 空字符串未处理
测试用例要求空字符串''返回false,但你的代码在空字符串时会直接跳过循环,返回true,不符合要求。需要先判断输入字符串长度为0的情况,直接返回false。
3. 单字符情况的隐含逻辑
测试用例要求单个字符(如'a')返回true,当字符串长度为1时,循环不会执行,直接返回true,这部分逻辑是对的,但需要结合边界判断一起处理。
修复后的完整代码
function isAlphabet(letters) { // 处理空字符串情况 if (letters.length === 0) { return false; } const ch = letters.toLowerCase(); // 循环到倒数第二个字符即可 for (let i = 0; i < ch.length - 1; i++) { if (ch[i + 1].charCodeAt() - ch[i].charCodeAt() !== 1) { return false; } } return true; }
验证所有测试用例
isAlphabet('abc')→true(循环执行i=0和i=1,两次差值都是1,返回true)isAlphabet('aBc')→true(转小写后和'abc'逻辑一致)isAlphabet('abd')→false(i=1时,d的charCode - b的charCode=2≠1,返回false)isAlphabet('a')→true(长度为1,跳过循环返回true)isAlphabet('')→false(直接触发空字符串判断)isAlphabet('abcdefghjiklmnopqrstuvwxyz')→false(i=7时,j的charCode - h的charCode=2≠1,返回false)isAlphabet('tuvwxyz')→true(所有相邻字符差值都是1)isAlphabet('XYZ')→true(转小写后符合顺序)isAlphabet('mnoprqst')→false(i=4时,r的charCode - p的charCode=2≠1,返回false)
内容的提问来源于stack exchange,提问作者Vladyslav Akopov
相关产品推荐
相关产品推荐

