這一篇介紹一下關於經典的字串匹配演算法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...