日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sunday java_Sunday算法:最快的字符串匹配算法

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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算法:最快的字符串匹配算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。