You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查找整数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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 17:15:02