查找整数A在整数B中的所有出现位置并移除输出中的-1值
多余-1的产生原因
你当前的实现逻辑没有对indexOf()的返回值做合法性校验,把查找失败时indexOf()默认返回的-1也直接加入了结果列表,因此全部匹配完成后,最后一次查找失败的-1会出现在输出中,出现示例里1、3、-1的异常结果。
补充说明:你当前的匹配逻辑本质是字符串匹配(整数转字符串后按内容查找),示例中
B=45356转成字符串为"45356",匹配"5"得到的索引就是1、3,符合预期。
正确实现方案
核心逻辑调整
循环调用indexOf()时,先判断返回值:
- 若返回值为
-1,直接终止循环,不要把该值存入结果 - 若返回值非
-1,再存入结果列表,同时更新下一次的查找起始位置
该逻辑适配所有带indexOf()/同类查找方法的语言(Java、JavaScript、Python等),仅需调整对应语法即可。
参考实现代码
const A = 5; const B = 45356; // 1. 整数转字符串,适配indexOf的查找要求 const mainStr = B.toString(); const targetStr = A.toString(); const matchLen = targetStr.length; const result = []; let startPos = 0; while (true) { // 从startPos开始查找目标串 const currentPos = mainStr.indexOf(targetStr, startPos); // 2. 关键过滤逻辑:没找到就直接跳出循环 if (currentPos === -1) break; // 找到才存入结果 result.push(currentPos); // 3. 更新下一次查找的起始位置:不允许重叠匹配就加matchLen,允许重叠就加1 startPos = currentPos + matchLen; } console.log(result); // 输出 [1, 3],无多余-1
常见错误写法对比
你之前的实现大概率类似下面的逻辑,无判断直接存入返回值:
// 错误示例 while(startPos < mainStr.length) { const currentPos = mainStr.indexOf(targetStr, startPos); result.push(currentPos); // 未判断currentPos是否为-1,直接存入导致多余值 startPos += 1; }
内容的提问来源于stack exchange,提问作者Jess Espanto
相关产品推荐
相关产品推荐

