leetcode443–压缩字符串(双指针/简单)

简介: leetcode443–压缩字符串(双指针/简单)

给你一个字符数组 chars ,请使用下述算法压缩:


从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 :


如果这一组长度为 1 ,则将字符追加到 s 中。

否则,需要向 s 追加字符,后跟这一组的长度。

压缩后得到的字符串 s 不应该直接返回 ,需要转储到字符数组 chars 中。需要注意的是,如果组长度为 10 或 10 以上,则在 chars 数组中会被拆分为多个字符。


请在 修改完输入数组后 ,返回该数组的新长度。


你必须设计并实现一个只使用常量额外空间的算法来解决此问题。


在内部直接修改,不会影响到后面的

int compress(char* chars, int charsSize){
    int index = 0;
    int i,j;
    printf("%c",chars[index]);
    for(i = 0;i < charsSize;)
    {
        // if(i == charsSize-1)
        // {
            // chars[index] = chars[i];
            // break;
        // }
        j = i+1;
        while(j < charsSize && chars[j] == chars[i])  //曾经的考点咋都忘了 &&前后条件不能交换顺序 因为要先判断越界 !!
        {
            j++;
        }
        if(j-i > 1)
        {
            chars[index++] = chars[i];
            int d = j-i;
            int d_index = 0;
            int arr[5];
            while(d > 0)
            {
                arr[d_index] = d%10;
                d = d/10;
                d_index++;
            } //保存好多个重复的时候 12个 要存‘1’,‘2’
            printf("%c",(j-i)+'0');
            while(d_index--)
            {
                chars[index++] = arr[d_index]+'0';
            }
            // chars[index++] = (j-i)+'0';
            printf("%c",chars[index-1]);
        }
        else if(j-i == 1)
        {
            chars[index++] = chars[i];
        }
        if(j == charsSize)
        {
            break;
        }
        i = j;
    }
    charsSize = index;
    return charsSize;
}
相关文章
|
5天前
|
索引
LeetCode438题(无敌双指针——滑动窗口)
LeetCode438题(无敌双指针——滑动窗口)
|
5天前
|
存储 算法 安全
【刷题】 leetcode 面试题 01.06 字符串压缩
来看效果: 非常好!!!过啦!!!
27 5
【刷题】 leetcode 面试题 01.06 字符串压缩
|
5天前
leetcode代码记录(删除字符串中的所有相邻重复项
leetcode代码记录(删除字符串中的所有相邻重复项
12 0
|
5天前
|
算法
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
25 1
|
5天前
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
5天前
|
机器学习/深度学习 索引
【力扣】387. 字符串中的第一个唯一字符
【力扣】387. 字符串中的第一个唯一字符
|
5天前
|
存储
leetcode2744. 最大字符串配对数目
leetcode2744. 最大字符串配对数目
17 0
|
5天前
|
机器学习/深度学习 NoSQL Shell
力扣刷题-翻转字符串
力扣刷题-翻转字符串
12 1
|
5天前
|
存储 算法
LeetCode刷题--- 61. 旋转链表(快慢指针+闭合为环)
LeetCode刷题--- 61. 旋转链表(快慢指针+闭合为环)

热门文章

最新文章