比KMP演算法更簡潔,更高效的sunday演算法

2021-08-11 18:15:10 字數 802 閱讀 1429

kmp演算法中next陣列計算比較難懂,sunday演算法更高效,但是網路中各個版本都有bug,自己除錯的無錯誤的權當作筆記:
//sunday演算法

/*,sunday演算法其實思想跟bm演算法很相似,只不過sunday演算法是從前往後匹配,

在匹配失敗時關注的是文字串中參加匹配的最末位字元的下一位字元。如果該字元沒有在匹配串中出現則直接跳過,

即移動步長= 匹配串長度+ 1;否則,同bm演算法一樣其移動步長=匹配串中最右端的該字元到末尾的距離+1。

*/#include #include using namespace std;

class solution ;

for(int j = 0; j < 26; ++j)

next[j] = len_d + 1;

for(int j = 0; j < len_d; ++j)

next[needle[j] - 'a'] = len_d - j;

//例如:needle = "abcedfb"

//next =

int pos = 0;

while(pos < (len_s - len_d + 1))

}if(j == len_d)

return pos;

} return -1;

}};int main(int argc, char **argv)

注:本版本只能比較含有小寫字母的字串,若含有其它非小寫字母(例如空格,大寫字母,需要更改)

MySQL比like語句更高效的寫法

like語句 select column from table where condition like keyword 事實上,可以使用 locate position 和 instr 這兩個函式來代替 一 locate語句 select column from table where locat...

簡潔的KMP演算法,C 實現

next陣列求解 以求c字元之前的最長公共前字尾為例,先假定len為3。字首對應aba,字尾對應bab,由於字首第乙個字元a 不等於 字尾第乙個字元 b,顯然len應該減1 len減一之後,字首對應ab,字尾對應ab,見下圖。則len定為2,next j 2。即next 4 2 全部 如下 incl...

如何更高效和更專業的使用谷歌搜尋

共10條較為有用的技巧 如何精確的搜尋乙個短語或引言 如果你想精確的搜尋乙個短語並確保 一定包含這個短語,可以使用雙引號 搜尋顯示的結果會包含雙引號的詞,並且是整體出現 如何使搜尋的結果不包含確定的片語或短語 例如我想搜尋 go fishing,但是不希望結果中出現 boat 的字,可以使用dash...