首页 > 其他分享 >C语言 | Leetcode C语言题解之第443题压缩字符串

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

时间:2024-09-29 20:23:04浏览次数:9  
标签:write 443 题解 chars C语言 char read int num

题目:

题解:

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;
}

标签:write,443,题解,chars,C语言,char,read,int,num
From: https://blog.csdn.net/m0_59237910/article/details/142625538

相关文章

  • C++ | Leetcode C++题解之第445题两数相加II
    题目:题解:classSolution{public:ListNode*addTwoNumbers(ListNode*l1,ListNode*l2){stack<int>s1,s2;while(l1){s1.push(l1->val);l1=l1->next;}while(l2){......
  • C++ | Leetcode C++题解之第443题压缩字符串
    题目:题解:classSolution{public:intcompress(vector<char>&chars){intn=chars.size();intwrite=0,left=0;for(intread=0;read<n;read++){if(read==n-1||chars[read]!=chars[read......
  • 实验1_C语言输入输出和简单程序应用编程
    task.1//打印一个字符小人#include<stdio.h>intmain(){printf("O\n");printf("<H>\n");printf("II\n");return0;}  task.1-1&1-2#include<stdio.h>intmain(){printf(&qu......
  • [USACO22DEC] Palindromes P 题解
    T3[USACO22DEC]PalindromesP郝题。首先考虑给定一个串\(S\)怎么求出要换多少次。易得,不可能交换两个本来就相同的字符。不妨观察\(\textttG\)的回文关系,一对\(\textttG\)回文当且仅当第一个\(\textttG\)前面的\(\textttH\)数量等于第二个\(\textttG\)后面的......
  • 嵌入式开发学习日记——第五天(c语言)
    循环控制语句 while循环        基本语法while(循环条件表达式){循环体语句;}        流程图案例——计数循环   实现计数循环要满足:        ①必须初始化循环变量        ②循环变量比较作为循环条件       ......
  • C语言内存函数
    1.memcpy的使用和模拟实现void*memcpy(void*destination,constvoid*source,size_tnum);函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置这个函数在遇到"\0"的时候并不会停下来如果source和destination有任何的重叠,复......
  • 实验1 C语言输入输出和简单程序编写
    task11#include<stdio.h>2intmain()3{4printf("0\n");5printf("<H>\n");6printf("II\n");7return0;8}   task1_1.c1#include<stdio.h>2intmain()3{4int......
  • 【问题解决】win10日志错误:创建 TLS 客户端凭据时发生致命错误。 内部错误状态为 1001
    背景最近win10死机了一次,查看事件管理器发现有大量的报错:“创建TLS客户端凭据时发生致命错误。内部错误状态为10013”,如图:解决win键搜索internet选项确定。原因参考错误:“创建TLS客户端凭据时发生致命错误。内部错误状态为10013”的说法是win10对TLSv3.0兼容性......
  • C语言 17 宏定义
    前面认识了#include指令,接着来看#define指令,它可以实现宏定义。宏是啥意思?把参数批量替换到文本中,这种实现通常称为宏(macro)或定义宏(definemacro)可以通过#define来定义宏,规则如下:#define宏名(记号)内容比如现在想通过宏定义一个PI:#definePI3.1415926这样就可以......
  • C语言 18 条件编译
    再来看看条件编译,还可以根据条件,选择性地对某些内容进行忽略。来认识一下#ifdef、#else、#endif这三种条件编译指令:#include<stdio.h>//ifdef用于判断是否定义了符号PI,如果没有的话则处理以下的指令#ifdefPI#defineM666//如果定义了符号PI,那么就处理这个分支的语......