美文网首页
leetcode 5 Longest Palindromic

leetcode 5 Longest Palindromic

作者: 叫我坤坤 | 来源:发表于2020-07-21 09:01 被阅读0次

题目

https://leetcode.com/problems/longest-palindromic-substring/submissions/

思路

毫无疑问是动态规划了。用二维数组dp[i][j]记录从i下标到j下标是否为回文子串,则dp[i][j]取值有下面三种情况:

  • i==j,此时dp[i][j]=true
  • i+1=j,此时dp[i][j]=s[i]==s[j]
  • 其余情况,此时dp[i][j]取值为true的条件为:dp[i+1][j-1]=true并且s[i]==s[j]

根据条件直接遍历len就好

代码

    public String longestPalindrome(String s) {
        int length = s.length();
        boolean[][] isPal = new boolean[length][length];
        int maxLen = 0;// 记录最长的长度
        String answer = ""; // 记录最长的字符串

        // 遍历子串的长度
        for(int len = 1; len <= length; len++) {
            for (int startIndex = 0; startIndex < length; startIndex++) {
                //计算起始位置并确保位置合法
                int endIndex = startIndex + len - 1;
                if (endIndex >= length) {
                    break;
                }
                // 核心逻辑
                isPal[startIndex][endIndex] = (len == 1)  // 长度为1
                        || (len == 2 && s.charAt(startIndex) == s.charAt(endIndex)) // 长度为2
                        || (isPal[startIndex + 1][endIndex - 1] && s.charAt(startIndex) == s.charAt(endIndex)); // 其他情况

                if (isPal[startIndex][endIndex] && len > maxLen) {
                    maxLen = len;
                    answer = s.substring(startIndex, endIndex + 1);
                }
            }
        }

        return answer;
    }

相关文章

网友评论

      本文标题:leetcode 5 Longest Palindromic

      本文链接:https://www.haomeiwen.com/subject/anvbkktx.html