字串查詢演算法中,最著名的兩個是kmp演算法(knuth-morris-pratt)和bm演算法(boyer-moore
)。兩個演算法在最壞情況下均具有線性的查詢時間。但是在實用上,kmp演算法並不比最簡單的c庫函式strstr()快多少,而bm演算法則往往比kmp演算法快上3-5倍。
但是,最壞的情況下,bm的時間複雜度貌似也是n×n。
具體就不說了,bm演算法是通過往後跳動主文字字串來實現快速非回溯查詢的,跳動的演算法就是用程式中的這句來實現的,下面:
i=i+m-min(j,1+last(p,t[i]));
而last是乙個求文字字串中的字元在查詢字串裡面出現的最後位置。
整個**如下:
#include
intlast(char*p,charc)
pp--;
count++;
}return-1;
}intmin(inta,intb)
intbm_index(char*t,char*p)
else
i--,j--;
}else
}return-1;
}int_tmain(intargc,_tchar*argv)
字串查詢
問題描述 對於乙個給定的 source 字串和乙個 target 字串,你應該在 source 字串中找出 target 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。解決思路 採用雙重for迴圈解決,思路清晰,較容易寫,但效率不高,另外一種方法是用kmp演算法,效率較高。需注意邊界條件,...
字串查詢
題目 對於乙個給定的 source 字串和乙個 target 字串,你應該在 source 字串中找出 target 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。思路 很簡單,看 就能懂 python處理字元真的優勢很大 主要是注意一些細節 class solution param so...
字串查詢
對於乙個給定的 source 字串和乙個 target 字串,你應該在 source 字串中找出 target 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。樣例 1 輸入 source source target target 輸出 1 樣例解釋 如果source裡沒有包含target的...