Java仅使用Stack的push/pop/peek查找循环停止索引问题求助
问题根因
- 核心问题是你使用了
contains()方法做模糊匹配,而需求要求匹配完整的停止值,该方法存在大量匹配失效场景:比如输入的目标值两端带有多余空格、输入内容大小写不匹配、存在子串混淆的情况,都会导致本该匹配成功的条件返回false。你遇到的返回4的问题,就是因为循环全程没有触发break条件,走完所有n次循环后index累计为4。 - 你写的栈匹配逻辑本身规则是正确的:第一次匹配到栈顶元素时index为0,弹出1次后匹配成功index为1,完全符合需求给出的示例要求。
修复方案
将匹配逻辑替换为equals()方法做精准匹配,可额外添加trim()去除输入内容两端的空白字符,避免手动输入时误加空格导致匹配失败。
修复后的循环代码如下:
for (int i = 0; i < n; i++) { if (books.peek().trim().equals(str.trim())) { break; } books.pop(); index++; }
如果校方需求允许模糊匹配(即包含目标子串就算匹配成功),可以调整为忽略大小写的模糊匹配逻辑:
for (int i = 0; i < n; i++) { if (books.peek().trim().toLowerCase().contains(str.trim().toLowerCase())) { break; } books.pop(); index++; }
内容的提问来源于stack exchange,提问作者Audrey
相关产品推荐
相关产品推荐

