NC17-最长回文子串

描述

对于长度为n的一个字符串A(仅包含数字,大小写英文字母),请设计一个高效算法,计算其中最长回文子串的长度。

解答

Approach 1:动态规划

public int getLongestPalindrome(String A) {
        // write code here
        if (A == null || A.length() == 0) return 0;
        int len = A.length();

        boolean[][] dp = new boolean[len][len];
        int maxLen = 1;
        for (int j = 0; j < len; j++) {
            for (int i = 0; i <= j; i++) {
                boolean equal = A.charAt(i) == A.charAt(j);
                dp[i][j] = j - i > 2 ? dp[i + 1][j - 1] && equal : equal;
                if (dp[i][j] && j - i + 1 > maxLen) {
                    maxLen = j - i + 1;
                }
            }
        }
        return maxLen;
    }

Approach 2:围绕中心展开法

 public int getLongestPalindrome2(String s) {
        if(s==null||s.length()==0)return 0;
        int maxLen=1;
        int len = s.length();
        for (int i = 0; i < len; i++) {
            int len1 = expandAroundCenter(s, i, i);
            int len2 = expandAroundCenter(s, i, i + 1);
            int max = Math.max(len1, len2);
            if(max>maxLen)maxLen=max;
        }
        return maxLen;
    }

    public int expandAroundCenter(String s, int left, int right) {
        int L = left, R = right;
        int len = s.length();
        while (L >= 0 && R < len && s.charAt(L) == s.charAt(R)) {
            L--;
            R++;
        }
        return R - L - 1;
    }
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务