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 的.考慮在暴力匹配中其實我們不一...