如何压缩像 “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/