字串類面試題型之二 字串的包含

2021-07-29 06:45:33 字數 1078 閱讀 9055

在筆試面試中,字串類是經常重點考的題型。本系列是本人為了準備筆試與面試,綜合各類書與部落格,整理所得。

希望在此過程中,希望可以深刻理解各種題型,督促自己的學習進步,並且分享給大家。如有錯誤,非常希望得到指點,不甚感激。

題目描述:

給定一長字串a和一短字串b。請問,如何最快地判斷出短字串b中的所有字串是否都在長字串a中?

a:  abcd

b:  bcd

本題也是來自於《程式設計之法》,書中給出了4種方法。第一種還是蠻力輪詢,是最直觀,但是也是效率最低的方法。第二種是排序後輪詢,但是此方法的效率依舊不高。第三種是素數相乘,使長字串a中的每個字母與乙個素數對應,再遍歷a,把a中的每個字串對應的素數相乘,得到乙個整數。讓短字串b中的字母也對應相應的素數,再用b中的每個字母對應的素數除以上面得到的整數。如果有餘數,說明結果為false,否則為ture。它給出的第四種方法是位運演算法,使用了乙個雜湊表(hash table),本人使用了一長度為26的陣列(也可以使用hashmap)來分別表示26個字母,記錄a中是否出現了相應的字母,出現則標記,並對b進行遍歷,判斷每個字母是否被標記過。如果都被標記過,則b為a的子串。

實現**如下:

int stringcontain(char *si, char *s2)

; int len_a = strlen(s1);

int len_b = strlen(s2);

for(i=0; i

字串包含,也還有一種題型,就是在字串中查詢子串,並且返回子串在字串中第一次出現的位置。

此題型也是較為簡單,使用兩個陣列進行輪詢比較即可。

實現**如下:

int strstr(const char *str1, const char *str2)

len1 = strlen(str1);

len2 = strlen(str2);

for(i=0; i<(len1-len2); i++)

{ if(str1[i] == str2[0])

{ for(j=0; j不足之處,敬請諒解,歡迎交流。

對於題目與解法的**,本人盡量給出出處,尊重原創,方便大家尋找。

字串 面試題 01 09 字串輪轉

題目 字串輪轉。給定兩個字串s1和s2,請編寫 檢查s2是否為s1旋轉而成 比如,waterbottle是erbottlewat旋轉後的字串 示例1 輸入 s1 waterbottle s2 erbottlewat 輸出 true 示例2 輸入 s1 aa s2 aba 輸出 false 提示 字串...

面試題 01 09 字串輪轉

字串輪轉。給定兩個字串s1和s2,請編寫 檢查s2是否為s1旋轉而成 比如,waterbottle是erbottlewat旋轉後的字串 示例1 輸入 s1 waterbottle s2 erbottlewat 輸出 true 示例2 字串長度在 0,100000 範圍內。說明 你能只呼叫一次檢查子串...

面試題 01 06 字串壓縮

字串壓縮。利用字元重複出現的次數,編寫一種方法,實現基本的字串壓縮功能。比如,字串aabcccccaaa會變為a2b1c5a3。若 壓縮 後的字串沒有變短,則返回原先的字串。你可以假設字串中只包含大小寫英文本母 a至z 示例1 輸入 aabcccccaaa 輸出 a2b1c5a3 示例2 字串長度在...