Java實現Sunday演算法

2021-08-01 16:16:11 字數 1124 閱讀 5535

sunday演算法是daniel m.sunday於2023年提出的字串模式匹配。其核心思想是:在匹配過程中,模式串發現不匹配時,演算法能跳過盡可能多的字元以進行下一步的匹配,從而提高了匹配效率。相比於另外幾個著名的字串匹配演算法,kmp以及bm演算法而言,sunday演算法不僅理解起來比較容易,而且往往能有更好的速度。

首先i,j兩個指標指示的位置(也就是從頭開始匹配),當發現失配的時候就判斷子串的後一位在母串的字元即空格(k標記處)是否在子串中存在?如果存在則將該位置和子串中的該字元對齊,在從頭開始匹配。如果不存在就將子串向後移動,和母串k+1處的字元對齊,再進行匹配。重複上面的操作直到找到,或母串被找完結束。

如上圖,這次比較還是失配,但是k位置的e在子串中出現了,而且第乙個就是,最後乙個也是,這時候一定要將子串中靠後出現的e和母串中的e對齊如下圖。

再從i,j開始進行比較。。。。。

**如下

package test03;

public

class test07

//注意每次都是從後向前

public

static

intcontains(char str,char ch)

}return -1;

}public

static

void

sunday(string s,string p)

//假如是主串的中間欄位與模式串匹配,且結果不匹配

//則就從模式串的最後面開始,(注意是從後向前)向前遍歷,找出模式串的後一位在對應的母串的字元是否在子串中存在

int pos=contains(parray, sarray[i+plen-j]);

if(pos==-1)else

}elseelse}}

}}

實現 Sunday 演算法

鑑於校園招聘筆試題,有個字串模式匹配的問題,99 都是暴力,偶爾一兩個寫kmp,但是明顯是知其表不知其裡。期待的 bm演算法 或者 sunday 沒有出現!鑑於的回覆,特此宣告 我的 假定字串中的字元都在ascii範圍內 by the way,國內有好多 是對sunday的改進,我本人是忽略不計,國...

SUNDAY 演算法 c 實現

public class sunday 實現sunday演算法 public int findchr string str,string sfind str length str.length fin length sfind.length while start fin length str le...

sunday演算法特徵碼 sunday 演算法

sunday 演算法 編輯鎖定 sunday演算法是daniel m.sunday於1990年提出的字串模式匹配。其核心思想是 在匹配過程中,模式串發現不匹配時,演算法能跳過盡可能多的字元以進行下一步的匹配,從而提高了匹配效率。中文名sunday 演算法 外文名sunday algorithm人 物...