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;
}
相关推荐
LYFlied40 分钟前
【每日算法】LeetCode 25. K 个一组翻转链表
算法·leetcode·链表
kingmax542120082 小时前
《数据结构C语言:单向链表-链表基本操作(尾插法建表、插入)》15分钟试讲教案【模版】
c语言·数据结构·链表
LYFlied4 小时前
【每日算法】LeetCode 19. 删除链表的倒数第 N 个结点
算法·leetcode·链表
mit6.8244 小时前
[box64] 解决ARM64运行x86_64跨平台兼容性 | 机器架构配置
c语言
喵了meme4 小时前
C语言实战6
c语言·开发语言
Logic1014 小时前
C程序设计(第五版)谭浩强 第七章课后习题优化算法与核心步骤解析
c语言·visualstudio·程序员·学习笔记·软件开发·编程基础·c语言入门
喵了meme4 小时前
Linux学习日记21:读写锁
linux·c语言·学习
努力学算法的蒟蒻5 小时前
day35(12.16)——leetcode面试经典150
算法·leetcode·面试
风中月隐5 小时前
C语言中以坐标的方式图解“字母金字塔”的绘制
c语言·开发语言·算法·字母金子塔·坐标图解法
LYFlied5 小时前
【每日算法】LeetCode 234. 回文链表详解
算法·leetcode·链表