字串匹配演算法

2021-10-23 03:33:07 字數 2612 閱讀 4624

sunday

/**

* @param str1 主串

* @param str2 子串

* @param pos 從主串的pos位置開始找.

* @return

*/public

static

intbf

(string str1,string str2,

int pos)

int i = pos;

//遍歷主串,

int j =0;

//遍歷子串

while

(i < lenstr1 && j < lenstr2)

else}if

(j >= str2.

length()

)else

}

tnext值表示t前面的串中最長的相等的字首和字尾的長度

* 判斷s1中是否存在s2,如果存在,返回匹配的起始索引,不存在返回-1

* @param s1

* @param s2

* @return

*/public

static

intgetindexof

(string s1,string s2)

char

str1 = s1.

tochararray()

;char

str2 = s2.

tochararray()

;// str1從i1位置開始,str2從i2位置開始,進行匹配

int i1 =0;

int i2 =0;

// 得到next陣列

int[

] next =

getnextarray

(str2)

;while

(i1 < str1.length && i2 < str2.length)

else

else}}

//i2 == str2.length,說明整個str2都匹配到了,否則返回-1

return i2 == str2.length ? i1 - i2 :-1

;}/** * 求next陣列

* @param str

* @return

*/private

static

int[

]getnextarray

(char

str);}

int[

] next =

newint

[str.length]

;//第乙個字元的next陣列值規定為-1,第二個字元的next陣列值規定為0

next[0]

=-1;

next[1]

=0;//從i開始,求[i,str.length)的next陣列值

int i =2;

// cn表示跳到的位置

int cn =0;

while

(i < next.length)

else

if(cn >0)

else

}return next;

}public

static

void

main

(string[

] args)

public

class

testsunday

/** *

* @param temps 主串

* @param tempt 子串

* @param indexs 遍歷主串是從indexs下標處開始遍歷

* @return

*/public

static

intsunday

(char

temps,

char

tempt,

int indexs)

else

}//匹配的字元數和子串的長度相等,即匹配成功

if(count == tempt.length)

//匹配失敗,看後面乙個字元在子串中有沒有相同的

if(indexs + tempt.length < temps.length)

else

}else

}/**

* 判斷在tempt陣列中有沒有c這個字元

* @param c

* @param tempt

* @return 返回c在tempt中的下標,沒有就返回-1

*/public

static

intcheck

(char c,

char

tempt)

return-1;}}

字串匹配演算法 字串匹配演算法總覽

字串匹配在文字處理裡非常重要,我們採用簡潔的python 把以下演算法一一實現並講解。樸素演算法 algorithm rabin karp 演算法 有限自動機演算法 finite automation knuth morris pratt 演算法 kmp algorithm boyer moore ...

字串匹配演算法

首先引用一下另一篇文章中對字串匹配的介紹 字串匹配指的是從文字中找出給定字串 稱為模式 的乙個或所有出現的位置。本文的演算法一律輸出全部的匹配位 置。模式串在 中用x m 來表示,文字用y n 來,而所有字串都構造自乙個有限集的字母表 其大小為 根 據先給出模式還是先給出文字,字串匹配分為兩類方法 ...

字串匹配演算法

平常操作文字的時候,經常需要操作對字串進行操作。而字串中最重要的一種操作就叫匹配,字串的匹配演算法很多,人們最熟悉的莫過於kmp演算法了。今天就來談一談一些字串匹配演算法。先來說說大名鼎鼎的kmp演算法,這個演算法出現在無數的資料結構與演算法書上面。它的策略很簡單 當模式串第k個字元不匹配主串中第s...