C语言 | Leetcode C语言题解之第443题压缩字符串

题目:

题解:

cpp 复制代码
void swap(char *a, char *b) {
    char t = *a;
    *a = *b, *b = t;
}

void reverse(char *a, char *b) {
    while (a < b) {
        swap(a++, --b);
    }
}

int compress(char *chars, int charsSize) {
    int write = 0, left = 0;
    for (int read = 0; read < charsSize; read++) {
        if (read == charsSize - 1 || chars[read] != chars[read + 1]) {
            chars[write++] = chars[read];
            int num = read - left + 1;
            if (num > 1) {
                int anchor = write;
                while (num > 0) {
                    chars[write++] = num % 10 + '0';
                    num /= 10;
                }
                reverse(&chars[anchor], &chars[write]);
            }
            left = read + 1;
        }
    }
    return write;
}
相关推荐
树在风中摇曳20 小时前
【C语言预处理器全解析】宏、条件编译、字符串化、拼接
c语言·算法
fashion 道格21 小时前
用 C 语言破解汉诺塔难题:递归思想的实战演练
c语言·算法
yuuki2332331 天前
【数据结构】常见时间复杂度以及空间复杂度
c语言·数据结构·后端·算法
闻缺陷则喜何志丹1 天前
【分块 差分数组 逆元】3655区间乘法查询后的异或 II|2454
c++·算法·leetcode·分块·差分数组·逆元
byte轻骑兵1 天前
【安全函数】C语言安全字符串函数详解:告别缓冲区溢出的噩梦
c语言·安全·面试
玖剹1 天前
穷举 VS 暴搜 VS 深搜 VS 回溯 VS 剪枝
c语言·c++·算法·深度优先·剪枝·深度优先遍历
Ch_ty1 天前
leetcode解题思路分析(一百六十八)1452 - 1458 题
算法·leetcode·哈希算法
红豆诗人1 天前
C语言进阶知识--文件操作
c语言·开发语言·文件操作
pilgrim531 天前
结合 Leetcode 题探究KMP算法
算法·leetcode
2401_861277551 天前
软考程序员2016年上半年二叉排序树案例题解答
c语言·决策树·链表