java实现rle编码_RLE算法有缺陷吗?

关于删除字符串中的重复字符,我正在查看最近的Code Golf . 我仔细考虑过它,并认为RLE算法会解决它,事实上,我确实相信会解决重复问题,我在C中写了一个实现,看看我能走多远

char *rle(const char *src){

char *p=(char *)src;

char *q=(char *)src+1;

char *rle_enc=NULL, *tmp_rle, buf[10];

int run=1;

while (*p){

while(*q){

if (*p==*q++) run++,p++;

}

sprintf(buf,"%d%c",run,*(p-1));

p++;

if (!rle_enc){

if ((rle_enc=malloc(strlen(buf)+1))!=NULL){

strcpy(rle_enc,buf);

}

}else{

if ((tmp_rle=realloc(rle_enc,(strlen(rle_enc)+strlen(buf)+1)))!=NULL){

rle_enc=tmp_rle;

strcat(rle_enc,buf);

}

}

q=(p+1);

run=1;

}

return rle_enc;

}

果然,这是主要的:

int main(int argc, char **argv){

char *test1 = "HHHHHHeeeeeelllllloooooooo";

char *test2 = "nbHHkRvrXbvkn";

char *p = rle(test1);

printf("s = %s\n", test1);

printf("p = %s\n", p);

if (p) free(p);

return 0;

}

根据Code Golf关于meta,它应该是可重用的并且解决一组问题,但是在最短的字符集中,公平地说我认为我对它非常正确,因为这引导我思考RLE算法本身,这里是一个Wikipedia上的页面,关于它的含义以及Java中的实现 .

代码确实看起来正在做它应该做的事情,所以我想,现在,只需要经过 rle 的编码字符串结果,寻找那些后跟字母的那些...

然而,我注意到了RLE算法的局限性,它只适用于那些具有一组彼此相邻的重复字符的人 . 但它没有通过Code Golf的测试案例,看起来看似简单,这让我想到了这个问题:

RLE算法有缺陷吗?现在它会在哪里使用?我认为由于RLE周围的数据和信息流量不再符合目的而产生的灰尘......

Edit: 感谢Moonshadow,John和Steve发布他们的答案 .

有一个基本的教训,我仍然没有学习 - 永远不会去OTT并且在涉及到这种事情时认为复杂,这是我的谬论,并显示了大的思维可以阻碍我的方式,我可以深深地吸入它并且在不看正确的角度的情况下被带走!再次感谢! :)

最好的问候,汤姆 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值