字元的雜湊表雖然占用了一定的額外空間,但可以大大地減少時間複雜度,是典型的空間換取時間的栗子。下面的栗子都屬於這一類。
【題目】
在字串中找出第乙個只出現k次的字元,如字串abeccdaff第乙個只出現1次的字元時e
【**】
char firstnrepeatingchar(const char *str, int n = 1);
const char *sp = str;
while(*sp) ++table[*(sp++)];
for(sp = str;*sp;++sp) if(table[*sp]==n) return *sp;
return '0';
}
【題目】
求從第乙個字串中刪除在第二個字串中出現過的所有字元後的字串,並返回刪除字元的個數。例如:從we are students. 中刪除aoeiu 後的字串為w r stdnts. 返回5。
【**】
int removecharsfromstring(char *str, const char *s);
while(*s) table[*(s++)] = 1;
char *sp = str;
while(*sp)
*str = '\0';
return res;
}
【題目】
限制乙個字串中字元重複出現的次數,特別的,當次數限制為1時就是刪除字串中重複出現的字元。返回值要求返回刪除的字元數。例如:aaaabbbccd 次數限制為1時為abcd,返回6。
【**】
int removeduplication(char *str, unsigned n = 1);
char *sp = str;
while(*sp) table[*(sp++)] = n;
for(sp = str;*sp;++sp)
else ++res;
} *str = '\0';
return res;
}
【題目】
在英語中,如果兩個單詞中出現的字母相同,並且每個字母出現的次數也相同,那麼這兩個單詞互為變位詞。要求判斷給定的兩個字串是否互為變位詞。
【**】
bool isanagtam(const char *s1, const char *s2);
while(*s1) ++table[*(s1++)];
while(*s2) --table[*(s2--)];
for(int k1(0);k1
雜湊表。筆試面試知識整理
雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。雜湊表的實現主要需要解決兩個問題,雜湊函式和衝突解決。雜湊函式也叫雜湊函式,它對不同的輸出值得到乙個固定長度的訊息摘要。理...
雜湊表(雜湊表)及雜湊表處理衝突的方法
前面介紹了靜態查詢表以及動態查詢表中的一些查詢方法,其查詢的過程都無法避免同查詢表中的資料進行比較,查詢演算法的效率很大程度取決於同表中資料的查詢次數。而本節所介紹的雜湊表可以通過關鍵字直接找到資料的儲存位置,不需要進行任何的比較,其查詢的效率相較於前面所介紹的查詢演算法是更高的。在初中的數學課本中...
雜湊表 雜湊函式構建和衝突處理
雜湊法又稱雜湊法 雜湊法以及關鍵字位址計算法等,相應的表稱為雜湊表。基本思想是 首先在元素的關鍵字k和元素的儲存位置p之間建立乙個對應關係f,使得p f k f稱為雜湊函式。建立雜湊表時,把關鍵字為k的元素直接存入位址為f k 的單元 以後當查詢關鍵字為k的元素時,再利用雜湊函式計算出該元素的儲存位...