解答:若字符爲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;
}