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()方法将压缩后的部分截取出来,并作为返回结果。

京公网安备 11010502036488号