KMP演算法的擴充套件應用

2021-10-06 15:29:49 字數 2594 閱讀 6757

這一篇介紹一下關於經典的字串匹配演算法kmp的擴充套件應用

在原始串的後面新增最少的字元生成乙個長字串,使長字串包含兩個原始串

時間複雜度:o(n)

/*

@author: lwl2020

@date: 2020-5-29

@description: 在原始串的後面新增最少的字元生成乙個長字串,使長字串包含兩個原始串

*/#include

#include

#include

using

namespace std;

/* 思路:

獲取字串的next陣列,這裡的next陣列多計算乙個整個串的最長字首和最長字尾,

將整個串的最長字首後面的部分新增到原始串後面,即可得到包含兩倍原始串的字串

*/class

caddchtotwice

vector<

int>

next

(str.

length()

+1,-

1);getnextarr

(str, next)

; string substr = str.

substr

(next.

at(str.

length()

), str.

length()

- next.

at(str.

length()

)); str.

(substr);}

private

:void

getnextarr

(string& str, vector<

int>

& next)

next.at(

1)=0

;int index =2;

int cn =0;

while

(index <= str.

length()

)else

if(cn ==0)

else}}

};intmain()

兩棵二叉樹t1、t2,判斷t1的子樹是否包含與t2相同的結構

時間複雜度:o(n)

/*

@author: lwl2020

@date: 2020-5-30

@description: 兩棵二叉樹t1、t2,判斷t1的子樹是否包含與t2相同的結構

*/#include

#include

#include

using

namespace std;

struct node };

class

ckmp

vector<

int>

next

(str2.

length()

,-1)

;getnextarr

(str2, next)

;int i1 =0;

int i2 =0;

while

(i1 < str1.

length()

&& i2 < str2.

length()

)else

if(i2 ==0)

else

}return i2 == str2.

length()

? i1 - i2 :-1

;}private

:void

getnextarr

(string& str2, vector<

int>

& next)

next.at(

1)=0

;int index =2;

int cn =0;

while

(index < str2.

length()

)else

if(cn ==0)

else}}

};/* 思路:

先將兩棵樹序列化

然後用kmp演算法判斷是否包含

*/class

ct1containt2

private

:void

serialize

(node* t, string& str)

str.

(to_string

(t->val)

+"#");

serialize

(t->left, str)

;serialize

(t->right, str);}

node*

generatetree1()

node*

generatetree2()

void

deletetree

(node* root)

deletetree

(root-

>left)

;deletetree

(root-

>right)

;delete root;}}

;int

main()

擴充套件KMP的應用

擴充套件kmp的應用 最長公共字首長度,記為extend i 或者說,extend i 為滿足s i.i z 1 t 0.z 1 的最大的z值 擴充套件kmp可以用來解決很多字串問題,如求乙個字串的最長回文子串和最長重複子串。擴充套件kmp next i x i.m 1 的最長公共字首 extend...

擴充套件的KMP演算法,

擴充套件的kmp演算法,這個演算法作為kmp的擴充套件,可以說是包含kmp的。它求出了一組數值,extend i 表示a串中以i開始的字尾 從i到lena的子串 與b串的最長公共字首 從頭數到不一樣的字元 的長度,也就是lcp。next i 表示t i.m 與t的最長公共字首長度,也就是自匹配的長度...

擴充套件KMP演算法

擴充套件kmp 求出a i.lena 1 與b的最長公共字首長度,記為ex i 或者說,ex i 為滿足a i.i z 1 b 0.z 1 的最大的z值 擴充套件kmp可以用來解決很多字串問題,如求乙個字串的最長回文子串和最長重複子串。演算法 設next i 為滿足b i.i z 1 b 0.z 1...