You need to enable JavaScript to run this app. Java实现相邻字符去重功能时数组索引越界的最优解决方案咨询
优惠活动
大模型
产品
解决方案
定价
更多

Java实现相邻字符去重功能时数组索引越界的最优解决方案咨询

解决方案

你当前代码的核心问题是遍历逻辑只处理了前n-1个字符,最后一位始终没有被加入结果,最轻量化的修复只需要在循环结束后追加最后一位字符即可,修正后的代码如下:

public String removeDuplicates(String source){
        if(source.length() < 2){
            return source;
        }

        StringBuilder noDuplicates = new StringBuilder();
        char[] string = source.toCharArray();

        for(int i = 0; i < string.length - 1; i++){
            if(string[i] != string[i+1]){
                noDuplicates.append(string[i]);
            }
        }
        // 追加最后一位字符,解决丢失问题
        noDuplicates.append(string[string.length - 1]);
        return noDuplicates.toString();
    }

验证说明

以输入ABBCDEF为例:

  • 循环遍历前6位(下标0到5),当下标1的B和下标2的B相等时不追加,其余符合不等条件的字符依次追加
  • 循环结束后追加最后一位F
    最终输出ABCDEF,完全符合预期,同时循环上限设为string.length -1不会出现下标越界问题。

如果需要兼容更复杂的相邻重复场景(例如AABBCC连续多组重复、甚至ABBA类嵌套相邻重复),也可以改用栈式实现:

public String removeDuplicates(String source){
        if(source.length() < 2){
            return source;
        }
        StringBuilder stack = new StringBuilder();
        for (char c : source.toCharArray()) {
            int len = stack.length();
            // 栈顶和当前字符相等则弹出栈顶(去重),否则压入当前字符
            if(len > 0 && stack.charAt(len -1) == c) {
                stack.deleteCharAt(len -1);
            } else {
                stack.append(c);
            }
        }
        return stack.toString();
    }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 22:06:03