sunday java_Sunday算法:最快的字符串匹配算法
之前被KMP的next數組搞的頭昏腦脹說不上也是比較煩人的,今天看到還有這么有趣而且高效的算法(比KMP還快),看來有必要做一點筆記了
Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配算法,其簡單、快速的特點非常好!
思路
其核心思想是:在匹配過程中,模式串發現不匹配時,算法能跳過盡可能多的字符以進行下一步的匹配,從而提高了匹配效率;可以預見到,“跳過多個數”這個邏輯又可以寫一個方法,然后被主函數調用
如果該字符沒有在匹配串中出現則直接跳過,即移動步長= 匹配串長度+1;否則,同BM算法一樣其移動步長=匹配串中最右端的該字符到末尾的距離+1
每一次移動前決定移動步長的是模式串末尾的下一個位置對應的主串字符
實現
//C語言
#include
#include
int getCurlA(char *tar, char ch, int curlA)
{
int *p = tar;
int delta = 0;
while(p && *p!=ch){
p++;
delta + = 1;
}
return curlA - delta;
}
int SundaySearch(char *src, char *tar)
{
int srcLen = strlen(src);
int tarLen = strlen(tar);
int curlA = curlB = 0;
while(src[curlA] == tar[curlB]){
if(curlB == tarLen-1){
return curlB - tarLen + 1;
}else{
curlA = getCurlB(&tar, src[curlA], curlB+1);
}
curlA++;
}
return -1;
}
總結
以上是生活随笔為你收集整理的sunday java_Sunday算法:最快的字符串匹配算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux命令、vi编辑器常用命令
- 下一篇: java日常日志打印模板