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

LeetCode9回文数Java代码报String index out of range错误原因求解

报错原因

你代码的核心问题是 每次截取新字符串后没有同步重置双指针的取值,导致指针索引超出了新字符串的有效下标范围。

我们以测试用例x=121为例,一步步看执行过程:

  1. 初始状态:s = "121",i=0,j = s.length()-1 = 2
  2. 第一次进入while(i<j)(0<2成立):
    • 比对s.charAt(0)和s.charAt(2),值都是'1',相等
    • 执行s = s.substring(i+1,j),Java的substring是左闭右开规则,这里传入1和2,得到新的s = "2"
  3. 第二次判断while(i<j):你没有修改过i和j的值,二者还是i=0、j=2,0<2依然成立
  4. 执行第8行的s.charAt(j):当前s的长度是1,有效下标只有0,调用charAt(2)直接触发下标越界错误。

修复方案

最简单的修改逻辑是不要修改原字符串,直接移动双指针即可,调整后代码如下:

class Solution {
    public boolean isPalindrome(int x) {
        String s = String.valueOf(x);
        int i = 0;
        int j = s.length()-1;
        
        while(i < j){
            if(s.charAt(i) != s.charAt(j)){
                return false;
            }
            // 直接移动指针,无需截取字符串
            i++;
            j--;
        }
        return true;
    }
}

如果你坚持要通过截取字符串实现,那每次截取后需要重置指针的取值,参考实现如下:

class Solution {
    public boolean isPalindrome(int x) {
        String s = String.valueOf(x);
        while(s.length() > 1){
            int len = s.length();
            if(s.charAt(0) != s.charAt(len-1)){
                return false;
            }
            s = s.substring(1, len-1);
        }
        return true;
    }
}

内容的提问来源于stack exchange,提问作者Binky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:36:08