如何判斷字符串是否包含重複字符

如何判斷字符串是否包含重複字符
問題:實現一個算法來判斷一個字符串中的字符是否唯一(即沒有重複).不能使用額外的數據結構.(即只使用基本的數據結構)
解答:若字符爲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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章