JavaScript查找首个不重复字符代码仅过16/19测试排错咨询
问题分析
你的代码核心问题出在多余的空格处理逻辑:
- 题目明确说明输入仅由小写英文字母组成,不存在空格,你添加的
replace(" ", "")属于完全不必要的操作 - 更关键的是,
String.replace()方法如果第一个参数传入普通字符串,只会替换第一个匹配到的字符,如果遇到隐含空格的边界测试用例,会直接修改原字符串的字符顺序,导致你统计的字符出现次数和原字符串不一致,最终返回错误结果
修复方案
直接删除多余的replace逻辑,拆分原字符串即可:
function firstNotRepeatingCharacter(s) { let strArr = s.split(""), newArr = []; for (let i = 0; i < strArr.length; i++) { newArr = strArr.filter(lol => lol === strArr[i]); if (newArr.length === 1) { return newArr[0]; } } return "_"; }
如果需要优化长字符串的运行效率,可以改用哈希表统计字符次数,时间复杂度降到O(n),性能更好:
function firstNotRepeatingCharacter(s) { const count = {}; // 第一次遍历统计每个字符出现次数 for (const c of s) { count[c] = (count[c] || 0) + 1; } // 第二次遍历找第一个出现次数为1的字符 for (const c of s) { if (count[c] === 1) return c; } return "_"; }
内容的提问来源于stack exchange,提问作者salah
相关产品推荐
相关产品推荐

