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

如何将字符串数组拆分为连续同类型字符的子数组?

拆分连续相同元素的数组为子数组

嘿,我来帮你搞定这个数组分组的问题!其实核心就是把原数组按连续位置上的相同元素拆分成多个子数组,下面我一步步给你讲清楚实现思路和代码示例。

核心思路

要实现这个功能,我们只需要遍历数组,跟踪当前连续的元素段,一旦遇到不同的元素,就把之前的连续段打包成子数组,然后继续处理后面的元素:

  • 先处理空数组的边界情况,避免报错;
  • 用一个列表来存储最终的子数组结果;
  • 初始化当前子数组,从第一个元素开始;
  • 遍历数组时,对比当前元素和当前子数组的最后一个元素:
    • 如果相同,就把当前元素加入当前子数组;
    • 如果不同,把当前子数组转成数组加入结果列表,然后重置当前子数组为新元素;
  • 遍历结束后,别忘了把最后一个子数组也加入结果(因为循环结束时最后一段还没被添加)。

代码示例(Java)

对应你给出的输入数组,我用Java写了一个可运行的示例:

import java.util.ArrayList;
import java.util.List;

public class ArraySplitter {
    public static List<String[]> splitIntoConsecutiveSubarrays(String[] inputArray) {
        List<String[]> result = new ArrayList<>();
        
        // 处理空数组的边界情况
        if (inputArray == null || inputArray.length == 0) {
            return result;
        }
        
        // 初始化当前子数组,加入第一个元素
        List<String> currentSubarray = new ArrayList<>();
        currentSubarray.add(inputArray[0]);
        
        // 从第二个元素开始遍历
        for (int i = 1; i < inputArray.length; i++) {
            String currentElement = inputArray[i];
            String lastElementInCurrent = currentSubarray.get(currentSubarray.size() - 1);
            
            if (currentElement.equals(lastElementInCurrent)) {
                // 和当前子数组元素相同,直接加入
                currentSubarray.add(currentElement);
            } else {
                // 元素不同,把当前子数组转成数组加入结果,然后重置当前子数组
                result.add(currentSubarray.toArray(new String[0]));
                currentSubarray = new ArrayList<>();
                currentSubarray.add(currentElement);
            }
        }
        
        // 把最后一个子数组加入结果
        result.add(currentSubarray.toArray(new String[0]));
        
        return result;
    }

    public static void main(String[] args) {
        String[] input = {"0","0","0","K","K","B","P","P","P","Z","Z","D","D","E","E","F","N","O","O"};
        List<String[]> subarrays = splitIntoConsecutiveSubarrays(input);
        
        // 打印拆分后的结果
        for (int i = 0; i < subarrays.size(); i++) {
            String[] subarray = subarrays.get(i);
            System.out.printf("第%d个子数组 = {", i+1);
            for (int j = 0; j < subarray.length; j++) {
                System.out.print("\"" + subarray[j] + "\"");
                if (j != subarray.length - 1) {
                    System.out.print(",");
                }
            }
            System.out.println("}");
        }
    }
}

运行结果

对应你的输入数组,运行后会输出正确的拆分结果:

第1个子数组 = {"0","0","0"}
第2个子数组 = {"K","K"}
第3个子数组 = {"B"}
第4个子数组 = {"P","P","P"}
第5个子数组 = {"Z","Z"}
第6个子数组 = {"D","D"}
第7个子数组 = {"E","E"}
第8个子数组 = {"F"}
第9个子数组 = {"N"}
第10个子数组 = {"O","O"}

哦对了,你给出的示例输出里有几个小笔误(比如第一个子数组写成了{"O,O,O"},第三个写成{"O","O}),应该是输入时的手滑,上面的结果才是正确的拆分~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:02:28