擴充套件kmp的應用 Best Reward

2021-10-07 10:01:17 字數 1176 閱讀 2004

best reward

題意:給定乙個長度為n的字串,問你能否將這個字串分成兩個字串,如果分成的字串是回文子串,那麼就會有價值,求分成兩個串的最大價值。

題解:學習到一手擴充套件kmp預處理後,o(1)就能判斷分成的兩個串是否為回文子串。s1為原串,s2為s1翻轉之後的串,然後你對s2求s1的ex陣列,對s1求s2的ex陣列。然後再根據ex陣列的定義,手推一下如何判斷分成的兩個串是否是回文串,具體可以看**。

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn =

1e6+10;

void

exkmp

(char s,

char t,

int nt,

int ex)

} j =0;

while

(j==t[j]

) j++

; ex[0]

= j; po =0;

for(

int i=

1;i}char s1[maxn]

,s2[maxn]

;int sum[maxn]

,v[30];

int nt1[maxn]

,nt2[maxn]

,ex1[maxn]

,ex2[maxn]

;int

main()

s2[n]

='\0'

;int ans =

-1e9

;exkmp

(s1,s2,nt1,ex1)

;exkmp

(s2,s1,nt2,ex2)

;for

(int i=

1;i)int pos = n - i ;

// printf("%d %d %d %d\n",pos,ex2[pos],sum[n-1],sum[i-1]);

if(pos+ex2[pos]

==n)

if(tmp>ans) ans = tmp;

}printf

("%d\n"

,ans);}

}

擴充套件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的擴充套件應用 在原始串的後面新增最少的字元生成乙個長字串,使長字串包含兩個原始串 時間複雜度 o n author lwl2020 date 2020 5 29 description 在原始串的後面新增最少的字元生成乙個長字串,使長字串包含兩個原始串 ...

KMP 擴充套件KMP

本文將不斷加入例題,稍安勿躁,今天的總結爭取9 30寫完.kmp,中文名字叫字串匹配,用於解決一類字串匹配問題.先下一些定義 首先我們先想一想 nxt i 對於求解問題有怎樣的幫助.我們對於每乙個 t i s 1 的位置都匹配一次,這樣子複雜度為 theta n m 的.考慮在暴力匹配中其實我們不一...