leetcode-5-最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

方法一:暴力法

class Solution{
    // 暴力法
    public String longestPalindrome(String s) {
        //定义一个空字符串
        String ans = "";
        int max = 0;
        int len = s.length();
        //循环遍历字符串的每一个可能字符串
        for (int i = 0; i < len; i++)
            for (int j = i + 1; j <= len; j++) {
                //定义一个新字符串用来承接可能的字符串
                String test = s.substring(i, j);
                //判断字符串是否为回文字符串并且字符串的长度大于当前的最大值
                if (isPalindromic(test) && test.length() > max) {
                    //如果是最大值,则返回到ans里面
                    ans = s.substring(i, j);
                    //更新最大值标记
                    max = Math.max(max, ans.length());
            }
        }
        //返回最大长度的字符串
        return ans;
    }
    // 定义一个函数,完成回文串的验证
    public boolean isPalindromic(String s) {
        int len = s.length();
        for (int i = 0; i < len / 2; i++) {
            if (s.charAt(i) != s.charAt(len - i - 1)) {
                return false;
            }
        }
        return true;
    }
}

方法二:暴力法,动态规划优化

class Solution{
    // 暴力法优化,动态规划
    public String longestPalindrome(String s) {
        int length = s.length();
        //数组P里面存储的是字符串是不是回文串的true和false
        boolean[][] P = new boolean[length][length];
        // 定义最大长度
        int maxLen = 0;
        // 定义空字符串
        String maxPal = "";
        // 遍历所有的长度
        for (int len = 1; len <= length; len++){ 
            for (int start = 0; start < length; start++) {
                int end = start + len - 1;
                // 下标已经越界,结束本次循环
                if (end >= length) 
                    break;
                // 长度为 1 和 2 的单独判断下,递归调用
                P[start][end] = (len == 1 || len == 2 || P[start + 1][end - 1]) && s.charAt(start) == s.charAt(end); 
                // 如果P数组里面的是true并且长度大于之前的最大长度,则更新最长回文子串
                if (P[start][end] && len > maxLen) {
                    maxPal = s.substring(start, end + 1);
                }
            }
        }    
        return maxPal;
    }
}

 

posted @ 2020-03-05 18:41  梁小松松松松松  阅读(164)  评论(0)    收藏  举报