HDU3068 最长回文(Manacher算法)
2015-10-04 21:19
453 查看
链接: ttp://acm.hdu.edu.cn/showproblem.php?pid=3068
var
p:array[1..1100000] of longint;
s,s1:ansistring;
mx,id,i,j,len,max:longint;
function min(a,b:longint):longint;
begin
if a<=b then min:=a else min:=b;
end;
begin
//assign(input,'manacher.in');reset(input);
//assign(output,'manacher.out');rewrite(output);
while not eof do begin
fillchar(p,sizeof(p),0);
readln(s);
if s<>'' then begin
i:=1;s1:=s;
while i<=length(s1)*2+1 do begin
insert('#',s,i);
i:=i+2;
end;
id:=0;
mx:=0; max:=-maxlongint+1;
for i:=1 to length(s) do begin
if mx>i then p[i]:=min(p[2*id-i],mx-i)
else p[i]:=1;
j:=p[i];
while true do begin
inc(j);
if (i+j-1>length(s)) or (i-j+1<=0) then break;
if s[i+j-1]<>s[i-j+1] then break;
end;
dec(j);
p[i]:=j;
if p[i]+i>mx then begin
mx:=p[i]+i;
id:=i;
end;
if p[i]-1>max then max:=p[i]-1;
end;
writeln(max);
end;
end;
readln;
//close(input);close(output);
end.
链接: ttp://acm.hdu.edu.cn/showproblem.php?pid=3068
var
p:array[1..1100000] of longint;
s,s1:ansistring;
mx,id,i,j,len,max:longint;
function min(a,b:longint):longint;
begin
if a<=b then min:=a else min:=b;
end;
begin
//assign(input,'manacher.in');reset(input);
//assign(output,'manacher.out');rewrite(output);
while not eof do begin
fillchar(p,sizeof(p),0);
readln(s);
if s<>'' then begin
i:=1;s1:=s;
while i<=length(s1)*2+1 do begin
insert('#',s,i);
i:=i+2;
end;
id:=0;
mx:=0; max:=-maxlongint+1;
for i:=1 to length(s) do begin
if mx>i then p[i]:=min(p[2*id-i],mx-i)
else p[i]:=1;
j:=p[i];
while true do begin
inc(j);
if (i+j-1>length(s)) or (i-j+1<=0) then break;
if s[i+j-1]<>s[i-j+1] then break;
end;
dec(j);
p[i]:=j;
if p[i]+i>mx then begin
mx:=p[i]+i;
id:=i;
end;
if p[i]-1>max then max:=p[i]-1;
end;
writeln(max);
end;
end;
readln;
//close(input);close(output);
end.
相关文章推荐
- 浅谈manacher算法 最长回文子串(Longest Palindromic Substring)
- 求回文字符串的最小分割
- 最长回文子串
- Leetcode Q5:Longest Palindromic Substring
- hihoCoder第一周:求解最大回文串
- KT学算法(三)——最长回文子串与Manacher算法
- 【Leetcode】Valid Palindrome
- Longest Palindromic Substring (最长回文串)【面试算法leetcode】
- leetcode:Palindrome Number (判断数字是否回文串) 【面试算法题】
- leetcode:Palindrome Partitioning (字符串分割成回文串的所有方式) 【面试算法题】
- Palindrome
- Palindrome. Again Palindrome
- 百度武汉站笔试题——算法题第一第二题Java实现
- [USACO 1.3.3]Calf Flac 最长回文子串模板
- HDU1282 回文数猜想
- leetcode-Longest Palindromic Substring
- USACO以前的1.3.3 [calfflac] manacher算法
- URAL 1297 Palindrome 后缀数组 或 Manacher 求最长回文子串
- O(n)时间复杂度求最长回文串
- 【最短路径】SPFA算法