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;
}
相关文章
|
2月前
|
JavaScript
力扣3333.找到初始输入字符串Ⅱ
【10月更文挑战第9天】力扣3333.找到初始输入字符串Ⅱ
34 1
|
2月前
|
C++
Leetcode第43题(字符串相乘)
本篇介绍了一种用C++实现的字符串表示的非负整数相乘的方法,通过逆向编号字符串,将乘法运算转化为二维数组的累加过程,最后处理进位并转换为字符串结果,解决了两个大数相乘的问题。
25 9
|
2月前
|
算法 C++
Leetcode第八题(字符串转换整数(atoi))
这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
20 0
|
2月前
【LeetCode 22】459.重复的子字符串
【LeetCode 22】459.重复的子字符串
30 0
|
2月前
【LeetCode 20】151.反转字符串里的单词
【LeetCode 20】151.反转字符串里的单词
20 0
|
2月前
【LeetCode 19】541.反转字符串II
【LeetCode 19】541.反转字符串II
21 0
|
2月前
【LeetCode 18】6.2.反转字符串
【LeetCode 18】6.2.反转字符串
15 0
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
61 6
|
4月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
124 2