标签:
/**
* 查找最大回文串
* 假设回文串是有一个中心的, 字符串的长度是 n
* 那么 总共可能的 中心 是 2n-1 ,因为 中心可能在 两个字母之间
*
* 在知道中心的情况下, 以这个为中心的最大回文串可以用
* 从中心 向两边扩展的形式 查找最大 的回文串
*
* 然后就可以找出这2n-1 中 哪个 中心 得到的最大回文串 是 最大的
* 比较巧妙的是 通过这个中心的最大回文串的长度求出了回文的 start 和 end
* 中心是可能在一个字母上,或者两个字母中间, 求 start 和end 的方式把两种情况统合起来了
*/
class Solution{ public String longestPalindrome(String s) { int start = 0, end = 0; for (int i = 0; i < s.length(); i++) { int len1 = expandAroundCenter(s, i, i); int len2 = expandAroundCenter(s, i, i + 1); int len = Math.max(len1, len2); if (len > end - start) { start = i - (len - 1) / 2; end = i + len / 2; } } return s.substring(start, end + 1); } private int expandAroundCenter(String s, int left, int right) { int L = left, R = right; while (L >= 0 && R < s.length() && s.charAt(L) == s.charAt(R)) { L--; R++; } return R - L - 1; } }
标签:
原文地址:http://www.cnblogs.com/coderbill/p/5467572.html