题解 | #压缩牛群编号# java
压缩牛群编号
https://www.nowcoder.com/practice/db9dd240e5f54b6d8eeadfbd9b7f865f
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param chars char字符型一维数组 * @return char字符型一维数组 */ public char[] compress (char[] chars) { // write code here int i = 0; // 当前字符的位置指针 int j = 0; // 压缩后存储位置指针 while (i < chars.length) { int count = 1; // 连续重复字符的数量 // 统计连续重复字符的数量 while (i + 1 < chars.length && chars[i] == chars[i + 1]) { count++; i++; } // 将当前字符存入结果数组 chars[j++] = chars[i]; // 如果连续重复字符的数量大于1,则将数字转换为字符存入结果数组 if (count > 1) { String countStr = String.valueOf(count); for (char c : countStr.toCharArray()) { chars[j++] = c; } } // 移动指针到下一个不同的字符位置 i++; } // 返回压缩后的数组长度 return Arrays.copyOfRange(chars, 0, j); } }
Java代码
题目的知识点是:
- 数组遍历
- 字符串处理
代码的文字解释如下:
该代码实现了一个对农场里每种牛的数量进行压缩表示的功能。它接受一个字符数组chars
,根据连续重复字符的情况进行压缩。
代码初始化两个指针i
和j
,分别用于追踪当前字符和压缩后存储的位置。
使用一个循环遍历字符数组chars
。在内部循环中,代码统计连续重复字符的数量count
。如果当前字符与下一个字符相同,则将count
加1,并移动指针i
。
将当前字符存入结果数组chars
的位置j
。如果连续重复字符的数量大于1,则将数字转换为字符并存入结果数组chars
中。
移动指针i
到下一个不同的字符位置,并继续迭代直到遍历完整个字符数组。使用Arrays.copyOfRange()
方法将压缩后的部分截取出来,并作为返回结果。