如何将字符串数组拆分为连续同类型字符的子数组?
拆分连续相同元素的数组为子数组
嘿,我来帮你搞定这个数组分组的问题!其实核心就是把原数组按连续位置上的相同元素拆分成多个子数组,下面我一步步给你讲清楚实现思路和代码示例。
核心思路
要实现这个功能,我们只需要遍历数组,跟踪当前连续的元素段,一旦遇到不同的元素,就把之前的连续段打包成子数组,然后继续处理后面的元素:
- 先处理空数组的边界情况,避免报错;
- 用一个列表来存储最终的子数组结果;
- 初始化当前子数组,从第一个元素开始;
- 遍历数组时,对比当前元素和当前子数组的最后一个元素:
- 如果相同,就把当前元素加入当前子数组;
- 如果不同,把当前子数组转成数组加入结果列表,然后重置当前子数组为新元素;
- 遍历结束后,别忘了把最后一个子数组也加入结果(因为循环结束时最后一段还没被添加)。
代码示例(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
相关产品推荐
相关产品推荐

