题解 | #最长回文子串#
最长回文子串
https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af
中心扩展法,统计长度因为每次都是+2,初始化的时候为了方便初始化比正常的大了1,所以需要减一;
import java.util.*; class Solution { public int getLongestPalindrome(String s) { int len = s.length(); int maxcnt = 0; if (s == null || (len) < 1) return 0; //总共有2 * len - 1个中心点 for (int i = 0; i < 2 * len - 1; i++) { //通过遍历每个回文中心,向两边扩散,并判断是否回文字串 //有两种情况,left == right,right = left + 1,这两种回文中心是不一样的 // 奇数相同,偶数加一 int left = i / 2, right = left + i % 2; int cnt; if (i % 2 == 0) cnt = 0; else cnt = 1; while (left >= 0 && right < len && s.charAt(left) == s.charAt(right)) { // 每次往外延展其实是2个长度! cnt += 2; //如果当前是一个回文串,则记录数量 if (maxcnt < cnt) { maxcnt = cnt; } left--; right++; } } return maxcnt - 1; } }