在做最长回文子字符串的问题(第 5 题)的时候, 我用的是 Manacher 算法,按理说应该可以过( O ( n )),但是居然超时了,答案倒是对的, 看了半天也不知道哪里出了问题,求助啊 T^T 。
下面是代码:
public class Solution { public String longestPalindrome(String s) { if (s.length() <= 1) { return s; } String newString = addHelperChar(s); int[] p = new int[newString.length()]; int maxId = 0; int maxRange = 0; for (int i = 1; i < newString.length(); i ++) { p[i] = maxRange > i ? (p[2 * maxId - i] < maxRange - i ? p[2 * maxId - i] : maxRange - i) : 1; while (i - p[i] > 0 && i + p[i] < newString.length() && newString.charAt(i + p[i]) == newString.charAt(i - p[i])) { p[i]++; } if (maxRange < p[i]) { maxId = i; maxRange = p[i]; } } String result = ""; for (int i = maxId - maxRange + 1; i < maxId + maxRange; i ++) { char temp = newString.charAt(i); if (temp != '#') { result += temp; } } return result; } public String addHelperChar(String s) { String result = "$"; for (int i = 0; i < s.length(); i ++) { result += "#"; result += s.charAt(i); } result += "#%"; return result; } } 