删除小写字母字符串中重复字符

来源:互联网 发布:周笔畅的淘宝店 编辑:程序博客网 时间:2024/06/06 18:21

因为删除的是小写字母字符串,所以开辟一个数组b[26]
首先初始化b全部为false
如果对应的b[arr[i]]是false,则将false置为true,同时将arr[j] = arr[i],++j
(也就是说,假如该字符串为aaaabb,则在第一次遇到a时,将false置为true,后面在遇到a时,不在满足if条件,当遇到b时,此时i=4,j=1,将arr[j] = arr[i],也就是把b放在a后面
最后,在arr[j]位置放上’/0’

void RemoveSameElement(char* arr){    bool b[26];    memset(b, 0, sizeof(b));    int j = 0;    for (int i = 0; i < strlen(arr); ++i)    {        if (!b[arr[i]])        {            b[arr[i]] = true;            arr[j] = arr[i];            ++j;        }    }    arr[j] = '\0';}

除此以外,对代码进行优化。
还可以用位示图来解决,只需要一个int(4字节32位)即可实现。

void RemoveSameElement2(char s[]){    unsigned int check = 0;    int len = strlen(s);    int j = 0;    int v = 0;    for (int i = 0; i < len; i++)    {        v = s[i] - 'a';        if (!(check & (1 << v)))        {            s[j] = s[i];            j++;            check |= (1 << v);        }    }    s[j] = '\0';}
阅读全文
0 0
原创粉丝点击