题解 | #最长回文子串#

最长回文子串

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param A string字符串
     * @return int整型
     */
    public int getLongestPalindrome(String A) {
        // write code here
        if (A == null || A.length() < 1) {
            return 0;
        }
        char[] arr = A.toCharArray();
        int n = arr.length;
        boolean[][] dp = new boolean[n][n];
        int max = 1;
        
        for (int r = 1; r < n; r++) {
            for (int l = 0; l < r; l++) {
                if (arr[l] == arr[r] && (r - l <= 2 || dp[l + 1][r - 1])) {
                    dp[l][r] = true;
                    max = Math.max(r - l + 1, max);
                }
            }
        }

        return max;
    }

    public int getLongestPalindrome2 (String A) {
        // write code here
        if (A == null || A.length() < 1) {
            return 0;
        }
        char[] arr = A.toCharArray();
        int res = 0;
        for (int i = 0; i < arr.length; i++) {
            int len1 = helper(arr, i, i);
            int len2 = helper(arr, i, i + 1);
            res = Math.max(res, Math.max(len1, len2));
        }
        return res;
    }

    private int helper(char[] arr, int l, int r) {
        while (l >= 0 && r < arr.length) {
            if (arr[l] == arr[r]) {
                l--;
                r++;
            } else {
                break;
            }
        }
        return r - l - 1;
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-20 20:30
点赞 评论 收藏
分享
若怜君欢:驾驶证去掉吧,PPT啥的也去掉,本硕课程去掉,导师和研究方向去掉;加入本硕排名(好才写);技能栏加入你会的那些控制算法和滤波算法,这个比你会啥啥啥软件更有用;获奖写上去,奖学金啊,有没有专利啊之类的 电机和硬件这一块,属于传统制造业,制造业实习并不多。多投一些攒攒经验,有实习最好,没有也不需要焦虑(制造业实习其实除了转正,没多大用处) 最后,划重点,等秋招开始后,把你所有社交软件都发一份简历上去,并经常更新,找人内推你!
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-20 14:14
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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