1. 程式人生 > >關於字串匹配的效率 strstr 對比 KMP

關於字串匹配的效率 strstr 對比 KMP

單一模板的字串匹配中,應該大多數OIer和ACMer都會選擇KMP演算法,因為KMP演算法的時間複雜度在最壞的情況下也是O(n),適合在很多情況中使用。

但是在某一次做題中發現題解內使用了函式strstr。之前都沒有注意過string.h標頭檔案裡的這個函式。

strstr(str1,str2) 函式用於判斷字串str2是否是str1的子串。如果是,則該函式返回str2在str1中首次出現的地址;否則,返回NULL。

char* strstr (char *_s1 , const char *s_2)

以上就是strstr函式的作用和其在string.h裡的宣告。

題目莫名就AC之後我就到網上找了一點點資料才發現。。KMP演算法在最壞的情況下也是O(n),但是strstr最壞的情況下是n^2,比如目標串是abcdabcdabcde,匹配串是abcde,這種情況下strsrt的表現就不盡人意。

但是!除非是在考察字串匹配的地方,基本不會出現以上那種情況。據測試,在一般的環境下,strstr'的表現是要比KMP優秀很多的,這就意味著只要不是考察字串匹配的地方,使用strstr不僅免去了手寫KMP的麻煩,反而會讓匹配效率大大提高。

這估計是我這幾天學習到的最好的姿勢了。。

【萌新發現這玩意都想發條部落格orz