Codewars「Alphabet symmetry」题JS实现测试输出不符问题求助
代码问题排查
这段代码有三个核心问题,直接导致测试用例结果偏差:
- 第一处:大写字母表字符串拼写错误
定义的大写字母表为'ABCDEFGHIGKLMNOPQRSTUVWXYZ',在索引9的位置(对应正确字母J)误写为G,后续位置的字母全部偏移,会导致对应位置的大写字符匹配失效。 - 第二处:字符位置取值逻辑错误
循环判断时使用elArr.indexOf(el)获取字符对应的字母表匹配位置,该方法只会返回字符在字符串中第一次出现的索引,和当前遍历到的字符的实际位置无关。比如测试用例里的"thedefgh"拆分后是['t','h','e','d','e','f','g','h'],遍历到第二个e(实际索引4)、第二个h(实际索引7)时,indexOf依然返回两个字符第一次出现的位置2和1,直接漏算符合匹配规则的字符,导致这个用例的计数比预期少2。 - 第三处:冗余的大小写双份字母表设计
同时维护大小写两套字母表不仅容易出现拼写错误,还增加了不必要的代码量,实际只需要把遍历到的字符统一转为同一种大小写格式,和单套字母表做匹配就可以。
修正后参考实现
function solve(arr){ // 预定义正确的小写字母表,索引和字母序号一一对应 const lowerAlpha = 'abcdefghijklmnopqrstuvwxyz'.split('') return arr.map(item => { let count = 0 // 遍历字符串时同时拿当前字符和它的实际位置索引 item.split('').forEach((char, idx) => { // 统一转小写后,和对应索引位置的字母表字符比对 if (char.toLowerCase() === lowerAlpha[idx]) { count++ } }) return count }) }
用例校验结果:针对测试输入
["IAMDEFANDJKL","thedefgh","xyzDEFghijabc"],修正后逐位匹配的计数结果为[6,5,7],和题目预期完全一致。
内容的提问来源于stack exchange,提问作者Тимур
相关产品推荐
相关产品推荐

