面試OR筆試18 雜湊表處理字串

2021-08-07 14:23:06 字數 1334 閱讀 5496

字元的雜湊表雖然占用了一定的額外空間,但可以大大地減少時間複雜度,是典型的空間換取時間的栗子。下面的栗子都屬於這一類。

【題目】

在字串中找出第乙個只出現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的元素時,再利用雜湊函式計算出該元素的儲存位...