最长回文子串与Manacher算法
题目描述 给定一个字符串,求它的最长回文子串的长度。 最简单粗暴的方法就是,枚举全部的字符串,然后每个都判断一下是不是回文,然后得到长度最长的字符串。显然,这个方法是可行的,可是也是效率极其低下的。 聪明一点的办法是枚举以每个字符作为中心,然后向两边扩展的字符串 例如字符串abcba: 以a为中心扩展,则最大回文长度为1 以b为中心扩展,因为a!=c,所以,最大回文长度也是1 以c为中心,有b==b,a==a,最大回文长度是5 ...... 得到最大回文长度是5 int LongestPalindrome(const char * s, int n) { int i, j, max, c; if (s == NULL || n < 1) { return 0; } max = 0; for(i = 0; i < n; i++) { for(j = 0; (i - j >= 0) && (i+j < n); j++) { if (s[i - j] != s[i + j]) break; c = j * 2 + 1; } if (c > max) max = c; for(j = 0; (i - j >= 0) && (i + j + 1 < n); j++) { if (s[i - j] != s[i + j + 1]) break; c = j * 2 + 2; } if (c >