郁郁青青 长过千寻

manacher

    字符串

  1. M(S,VS)
  2. INITIALIZE(S,VS)

M(S,VS)

1
2
3
4
5
6
7
8
9
10
11
12
13
初始化整形数组p[1057],整形变量ci,rei=0 //palindrome,central,right endpoint
len=INITIALIZE(s,vs);
for i=1 to len-1
if i<rei
p[i]=min(p[2*ci-i],rei-i)
else p[i]=1
while vs[i-p[i]]==vs[i+p[i]]
p[i]=p[i]+1
if rei<i+p[i]
ci=i
rei=i+p[i]
maxlen=max(maxlen,p[i-1])
return maxlen

INITIALIZE(S,VS)

1
2
3
4
5
6
7
8
9
len=s.length
vs[0]='@'
vs[1]='!'
for j=2 i=0 to len-1
vs[j]=s[i]
j=j+1
vs[j]='!'
j=j+1
return j

P1659 [国家集训队]拉拉队排练
P4555 [国家集训队]最长双回文串

页阅读量:  ・  站访问量:  ・  站访客数: