题解 | #压缩牛群编号#

压缩牛群编号

https://www.nowcoder.com/practice/db9dd240e5f54b6d8eeadfbd9b7f865f

考察的知识点:字符串;

解答方法分析:

  1. 创建一个整数变量write和一个整数变量left,初始值都为0。write用于记录当前写入位置,left用于记录当前连续字符序列的起始位置。
  2. 遍历输入的字符数组chars,使用一个整数变量read作为遍历指针。
  3. 对于每个字符chars[read],判断它是否和下一个字符chars[read + 1]相同,或者已经到达数组末尾(即read == n - 1)。
  4. 如果当前字符chars[read]不等于下一个字符chars[read + 1],则说明这是一个连续字符序列的结束位置。
  5. 将当前字符chars[read]写入到chars[write++]中,表示压缩后的字符。
  6. 计算连续字符序列的长度num,即read - left + 1。
  7. 如果num大于1,说明连续字符序列有重复的字符。
  8. 将num转换为字符串str,使用to_string函数进行转换。
  9. 遍历字符串str的每个字符ch,将其依次写入到chars[write++]中。
  10. 更新left的值为read + 1,表示下一个连续字符序列的起始位置。
  11. 遍历结束后,将chars数组的长度调整为write,即截断多余的部分。
  12. 返回压缩后的字符数组chars。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param chars char字符型vector
     * @return char字符型vector
     */
    vector<char> compress(vector<char>& chars) {
        int n = chars.size();
        int write = 0, left = 0;
        for (int read = 0; read < n; read++) {
            if (read == n - 1 || chars[read] != chars[read + 1]) {
                chars[write++] = chars[read];
                int num = read - left + 1;
                if (num > 1) {
                    string str = to_string(num);
                    for (char& ch : str) {
                        chars[write++] = ch;
                    }
                }
                left = read + 1;
            }
        }
        chars.resize(write);
        return chars;
    }

};

全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 13:41
点赞 评论 收藏
分享
05-29 09:02
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务