LeetCode--5. 最长回文串(java)

原题链接
思路:动态规划
dp[i][j] :i 代表 s 的起点,j 代表 s 的终点
在这里插入图片描述
(P就是 dp的意思)

class Solution {
    public String longestPalindrome(String s) {
        int n = s.length();
        String res = "";
        boolean[][] dp = new boolean[n][n];
        
        for(int i = n - 1;i >= 0;i--) {//当前子串的起点
        	for(int j = i;j < n;j++) {//当前子串的终点
        	// j - i < 2说明当前子串长度为 0 或 1,那肯定是回文串,
        	//dp[i + 1][j - 1]表示 dp[i][j]的子串,这两个条件都旨在判断 dp[i][j]的子串是回文串
        		dp[i][j] = s.charAt(i) == s.charAt(j) && (j - i < 2 || dp[i + 1][j - 1]);
        		// dp[i][j]是回文串 且 长度更大,则更新结果串
        		if(dp[i][j] && j - i + 1 > res.length()) res = s.substring(i, j + 1);
        	}
        }
        return res;
    }
}
发布了48 篇原创文章 · 获赞 4 · 访问量 2946

猜你喜欢

转载自blog.csdn.net/QinLaoDeMaChu/article/details/104068982