尝试用Java写一些算法,之前一直写的一直是很简单的输入输出。
import java.util.*;
public class Main
{
public int Manacher(String a)
{
int mx = 0, id = 0;
String t = "$#";
for(int i = 0; i < a.length(); ++i)
{
t = t + a.charAt(i);
t = t + "#";
}
int p[] = new int[t.length()];
int ans = -1;
for(int i = 1; i < t.length(); ++i)
{
p[i] = i < mx ? Math.min(mx - i, p[id*2 - i]) : 1;
while(i + p[i] < t.length() && t.charAt(i - p[i]) == t.charAt(i + p[i]))
{
++p[i];
}
if(i + p[i] > mx)
{
mx = i + p[i];
id = i;
}
if(ans < p[i])
{
ans = p[i];
}
}
return ans - 1;
}
public static void main(String[] agrs)
{
Scanner sc = new Scanner(System.in);
Main tt = new Main();
String s;
while(sc.hasNext())
{
s = sc.next();
System.out.println(tt.Manacher(s));
}
}
}