删除非连续重复字符

算法思路:

假设当前待处理字符位于目标字符数组的Snow处,当前结果字符数组的可用位置为Pnow,检查是否出现连续相同字符,如果出现,则将最长连续相同字符放入Pnow开始的连续可用位置;如果不出现,则取Snow处字符与结果字符(Pnow-1)到0处的字符对比,使用一个变量作为指示,如果没有找到匹配,该变量值为-1;如果找到,这变量值为匹配值所在位置。使用变量mismatch标识是否匹配到。如果匹配到则处理下一个未处理字符,如果未匹配到,则将该字符装入结果字符数组的Pnow处。


以下代码在xcode 4.6.3上编译通过
#include <stdio.h>
#include <stdlib.h>

typedef enum _bool{
    no =0,
    yes = 1
}bool;

int main(int argc, const char * argv[])
{
    char string[] = "ajsjdjjddddsssapoptfd";
    int Snow = 0,Pnow = 0,i=0,j=0;
    bool  mismatch = yes;
    char processed[100];
    while(string[Snow]){
        j = Snow;
        if (string[j]==string[++j]) {
            while ((processed[Pnow++]=string[Snow])==string[++Snow]);
        }else{
            i = Pnow;
            while ((--i>=0)&&(processed[i]!=string[Snow])) ;
            if (i==-1) {
                mismatch = yes;
            }else mismatch = no;
            if(mismatch){
                processed[Pnow++]=string[Snow];
            }
            ++Snow;
        }
    }
    processed[Pnow]='\0';
    printf("%s",processed);
    return 0;
}


结果:

ajsdjjjjddddssspotf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值