如何判断字符串是否包含重复字符

来源:互联网 发布:京东方屏幕知乎 编辑:程序博客网 时间:2024/06/05 18:15
如何判断字符串是否包含重复字符
问题:实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构.(即只使用基本的数据结构)
解答:若字符为ASCII字符集合.则一个时间复杂度为O(n)的解法如下:
我们还可以通过位运算来减少空间的使用量.用每一位表征相应位置字符的出现.对于ASCII字符,我们需要256位,即一个长度为8的int 数组a即可(BitMap).这里的关键是要把字符对应的数字,映射到正确的位上去.比如字符’b’对应的代码是98,那么我们应该将数组中的哪一位置为1呢?用98除以32,得到对应数组a的下标:3;98对32取模得到相应的位:2.相应代码如下:
typedef enum{false = 0,true = 1}bool;bool isUnique2(char *pp_String){    int a[8];    memset(a, 0, sizeof(a));    int len = strlen(pp_String);    for(int i=0; i < len; ++i)    {        char v = (int)pp_String[i];        int idx = v/32, shift=v%32;        if(a[idx] & (1 << shift)) return false;        a[idx] |= (1 << shift);    }    return true;}
0 0
原创粉丝点击