大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
这道题目考察的是对字符数组的处理和压缩操作,同时要求使用常量额外空间完成。
题目解答方法的文字分析
我们需要对输入的字符数组进行遍历,统计连续相同字符的数量,并将结果进行压缩。要注意,压缩后的结果需要重新存储到输入字符数组中,并返回新的数组长度。
思路步骤:
- 定义两个指针,一个用于遍历原始字符数组,另一个用于记录新的压缩字符数组的位置。
- 初始化计数器count为1,用于记录当前连续相同字符的数量。
- 遍历原始字符数组:如果当前字符与前一个字符相同,增加计数器count。如果当前字符与前一个字符不同,将前一个字符拷贝到新的字符数组中,并根据count的值来确定是否压缩数量。更新计数器count为1。
- 处理最后一个字符,重复步骤3中的操作。
- 返回新的字符数组长度。
本题解析所用的编程语言
本题解析使用C++语言。
完整且正确的编程代码
#include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param chars char字符型vector * @return char字符型vector */ vector<char> compress(vector<char>& chars) { int n = chars.size(); // 原始字符数组长度 int writeIndex = 0; // 新的字符数组写入位置 int count = 1; // 记录连续相同字符的数量 for (int i = 1; i < n; i++) { if (chars[i] == chars[i - 1]) { count++; } else { chars[writeIndex++] = chars[i - 1]; // 将前一个字符拷贝到新的字符数组中 if (count > 1) { // 如果当前字符连续出现次数大于1,则将其压缩成字符+数量的形式 string countStr = to_string(count); for (char ch : countStr) { chars[writeIndex++] = ch; } } count = 1; // 重置计数器 } } // 处理最后一个字符 chars[writeIndex++] = chars[n - 1]; if (count > 1) { string countStr = to_string(count); for (char ch : countStr) { chars[writeIndex++] = ch; } } // 返回新的字符数组长度 return vector<char>(chars.begin(), chars.begin() + writeIndex); } };