题解 | #最长回文子串#

最长回文子串

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

dp[i][j] = dp[i+1][j-1], dp[i+1][j-1]是回文 dp[i][j] = 0 表示不是回文

dp的基础是长度,需要每层长度遍历

import java.util.*;

public class Solution {
    public int getLongestPalindrome(String A, int n) {
        int maxLen = 1;
        int dp[][] = new int[n+1][n+1];
        for (int i = 0; i < n; i++) {
            dp[i][i] = 1;
        }
        for (int i = 0; i < n-1; i++) {
            if (A.charAt(i) == A.charAt(i+1)) {
                dp[i][i+1] = 1;
                maxLen = 2;
            }
        }
        for (int k = 2; k < n; k++) { // 长度2开始计算
            for (int i = 0; i < n - k; i++) {
                int j = i + k;
                if (A.charAt(i) == A.charAt(j) && dp[i+1][j-1] == 1) {
                    dp[i][j] = 1;
                    if (maxLen < k+1) maxLen = k+1;
                }
            }
        }
        return maxLen;
    }
}
全部评论

相关推荐

零OFFER战士:另一个版本查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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