三天一題 01 子字串查詢

2021-09-21 02:25:06 字數 2020 閱讀 8418

pattern:abcd

source:abdabbaabcadaaabcdda

暴力解法

public

static

intserch

(string source, string pattern)

}return-1

;}

在最壞的情況下,暴力字串查詢演算法在長度為n的文字中查詢長度為m的模式是需要n^m次。

暴力解法(回退法)

public

static

intsearch

(string pattern, string source)

if( j == pat)

return i;

else

return-1

;}

這種是暴力解法的加強版,最壞的結果是n次。

kmp演算法-dfa(確定有限狀態自動機)

簡介:knuth、morrish和pratt發明的演算法的基本思想是當出現不匹配時,就能知曉一部分文字的內容(因為在匹配失敗之前它們已經和模式相匹配)。-摘自《演算法》第四版

package test;

import sun.nio.ch.sctp.sctpstdsocketoption;

/** * kmp

*/public

class

kmp}

}public

intsearch

(string txt)

if(j == m)

return j - m;

//找到匹配,達到模式字串的末尾

else

return n;

}public

static

void

main

(string[

] args)

; string pat = args[0]

; string txt = args[1]

; kmp kmp =

newkmp

(pat)

; system.out.

println

("text:"

+txt)

;int offset = kmp.

search

(txt)

; system.out.

println

("pattern:"

+pat)

;for

(int i =

0; i < offset; i++

) system.out.

println(""

);system.out.

println

(pat);}

}

kmp演算法-next陣列

private

static

int[

]generatenext

(string pattern)

else

}return next;

}public

static

intkmpmatch

(string pattern,string source)

else}if

(sindex == length)

return-1

;}public

static

void

main

(string[

] args)

《每日一題》最大回文子字串

使用manacher法求解 def findbmstr s 建立新的s new s for sub in s new s sub new s 初始化p,記錄以每個在new s中的字元為中心的最大回文子串的單邊延伸量 l len new s p 1 for in range 遍歷每個字元,計算p i ...

三天一題 06 堆排序

借鑑 借鑑跳轉,上面都有詳細的描述以及 的實現。堆排序堆排序 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆排序 public class heapsort 父節點大於子節點...

三天一題 08 歸併排序

借鑑 借鑑跳轉,上面都有詳細的描述以及 的實現。歸併排序 歸併排序 merge sort 把長度為n的輸入序列分成兩個長度為n 2的子串行 對這兩個子串行分別採用歸併排序 將兩個排序好的子串行合併成乙個最終的排序序列。public class mergesort mergesort arr,0,ar...