java - 压缩和解压缩字符串

标签 java c string

如何压缩像 “aaabbbc” 这样的字符串至“a3b3c”并解压缩它,在处理过程中不使用额外的内存,主要是在 C 和 Java 中?

最佳答案

简单的反向扫描至少为编码部分提供了(看似)良好的解决方案。我正在从右到左进行一次扫描,并用出现次数覆盖字符串的部分。

char * enc(char * ip)
{
    int r,op;
    int l=strlen(ip);
    r=l-1;
    char curr;
    op=r;
    int curr_count=1,mod_curr_count;
    while(r>=0)
    {
        curr=ip[r];

        while(ip[--r]==curr)
        {

            curr_count++;
        }
        if(curr_count!=1)
        {
            while(curr_count)
            {
            mod_curr_count=curr_count%10;
            ip[op--]=(char)(mod_curr_count+48);
            curr_count/=10;
            }
            ip[op--]=curr;
            curr_count=1;

        }
        else
        {
        ip[op--]=curr;
        }
    }

    ip=ip+op+1;
    return ip;
}

输入:aaaaaaaaaaaabbbffffffffffffffffqqqqqqqqqqqqqqqqqqccccpoii

输出: a12b3f15q18c4poi2

关于java - 压缩和解压缩字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13634705/

相关文章:

java - 在 android 中退出 NavUtils 的应用程序

c - malloc 与 mmap 性能

JAVA StAX 提取

Java - 对定期清除的本地值存储的多线程访问

java.lang.numberformaexception : invalid double: ""

c++ - 使用 malloc 初始化一个类

C预处理器: How to create a character literal?

c++ - 使用多个定界符拆分字符串,允许引用值

c++ - printf ("... %c ...",'\0' ) 和家人——会发生什么?

string - 在子字符串之后批量修剪文本文件中的行 - REM 带有扩展的修剪