leetcode 5. 最长回文子串 647. 回文子串 java

leetcode 5. 最长回文子串 647. 回文子串 java

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

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:

输入: "cbbd"
输出: "bb"
class Solution {
    public String longestPalindrome(String s) {
        if (s.length() <= 1)
            return s;
        
        String longest = s.charAt(0)+"";
        int length = s.length();
        boolean[][] dp = new boolean[length][length];
        for(int i = length-1; i >= 0; i--){
            for(int j = i; j < length; j++){
                dp[i][j] = (s.charAt(j) == s.charAt(i) && ((j-i<3) || dp[i+1][j-1]));
                if(dp[i][j] && j-i+1 > longest.length()){
                    longest = s.substring(i, j+1);
                }
            }
        }
        return longest;
    }
}

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。

示例 1:

输入: "abc"
输出: 3
解释: 三个回文子串: "a", "b", "c".
示例 2:

输入: "aaa"
输出: 6
说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".
class Solution {
    public int countSubstrings(String s) {
        int count = 0;
        if (s.length() <= 1)
            return s.length();
        
        String longest = s.charAt(0)+"";
        int length = s.length();
        boolean[][] dp = new boolean[length][length];
        for(int i = length-1; i >= 0; i--){
            for(int j = i; j < length; j++){
                dp[i][j] = (s.charAt(j) == s.charAt(i) && ((j-i<3) || dp[i+1][j-1]));
                if(dp[i][j]){
                    count ++;
                }
            }
        }
        return count;
    }
}
发布了32 篇原创文章 · 获赞 13 · 访问量 8310

猜你喜欢

转载自blog.csdn.net/qq_23858785/article/details/98937480