尝试用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)); } } }