题解 | #最长回文子串#

最长回文子串

http://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af

import java.util.*;

public class Solution { public int getLongestPalindrome(String A) { int n = A.length(); StringBuilder sb = new StringBuilder(); for(int i = 0;i < n;i++){ sb.append('#').append(A.charAt(i)); } sb.append('#');

    int rmax = 0,mid = 0,ans = 0;
    n = n * 2 + 1;
    int[] dp = new int[n];
    for(int i = 0;i < n;i++){
        dp[i] = rmax > i ? Math.min(rmax - i + 1,dp[2 * mid - i]) : 1;
        while(i + dp[i] < n && i - dp[i] >= 0 && sb.charAt(i + dp[i]) == sb.charAt(i - dp[i])){
            dp[i]++;
        }
        
        if(dp[i] + i - 1 > rmax){
            mid = i;
            rmax = i + dp[i] - 1;
        }
        
        ans = Math.max(ans,dp[i]);
    }
    
    return ans - 1;
}

}

我居南半坡 文章被收录于专栏

多刷题,积蓄力量,欢迎讨论

全部评论

相关推荐

風に薫る:前阵子把一个面试时老托腮抖腿的挂了 太松弛真不行
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务