码迷,mamicode.com
首页 > 其他好文 > 详细

最长回文子串

时间:2016-05-07 01:00:04      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

/**
* 查找最大回文串
* 假设回文串是有一个中心的, 字符串的长度是 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!