JavaScript自定义字符串搜索函数返回错误结果如何修正
现有代码错误原因
现有逻辑未校验字符的连续顺序匹配规则:遍历输入字符串的每个字符时,会在整个目标字符串中查找所有相等的字符直接存入结果,不要求匹配位置连续、顺序对齐,所以会出现重复存入相同字符的异常输出。
修复实现
极简实现(调用JS原生方法)
直接用String.includes()判断子串是否存在:
const target = "hello"; function searchStr(s) { return target.includes(s) ? s : -1; } const res = searchStr("ello"); console.log('res', res) // 输出:ello
手动实现匹配逻辑
如果需要自行实现匹配算法,用逐位对齐匹配的逻辑实现:
const target = "hello"; const targetArr = [...target]; function searchStr(s) { const inputArr = [...s]; const inputLen = inputArr.length; const targetLen = targetArr.length; // 目标串长度小于输入串,直接判定匹配失败 if (targetLen < inputLen) return -1; // 遍历目标串所有可能的匹配起始位置 for (let startIdx = 0; startIdx <= targetLen - inputLen; startIdx++) { let isMatch = true; // 逐位对比字符 for (let i = 0; i < inputLen; i++) { if (targetArr[startIdx + i] !== inputArr[i]) { isMatch = false; break; } } if (isMatch) return s; } // 无匹配结果 return -1; } const res = searchStr("ello"); console.log('res', res) // 输出:ello
内容的提问来源于stack exchange,提问作者Denny
相关产品推荐
相关产品推荐

