力扣hot100 长回文子串 中心扩散法 动态规划 一题多解 满注释版

Problem: 5. 最长回文子串
在这里插入图片描述

思路

👨‍🏫 参考

💖 中心扩散法

在这里插入图片描述

class Solution {
 public String longestPalindrome(String s) {
        if (s == null || s.length() < 2) {
            return s;
        }
        int strLen = s.length();
        int maxStart = 0;  //最长回文串的起点
        int maxEnd = 0;    //最长回文串的终点
        int maxLen = 1;  //最长回文串的长度

        boolean[][] dp = new boolean[strLen][strLen];

        for (int r = 1; r < strLen; r++) {
            for (int l = 0; l < r; l++) {
                if (s.charAt(l) == s.charAt(r) && (r - l <= 2 || dp[l + 1][r - 1])) {
                    dp[l][r] = true;
                    if (r - l + 1 > maxLen) {
                        maxLen = r - l + 1;
                        maxStart = l;
                        maxEnd = r;

                    }
                }

            }

        }
        return s.substring(maxStart, maxEnd + 1);

    }

}

💖 DP

class Solution {
   
	public String longestPalindrome(String s)
	{
   
		if (s == null || s.length() == 0)
			return "";
		int n = s.length();
		char[] ss = s.toCharArray();
		int maxLen = 1;
		int begin = 0;
        // 默认为 false
		boolean[][] f = new boolean[n][n];// f[i][j] 表示 s的闭区间[i,j] 是否回文
		for (int i = 0; i < n; i++)
			f[i][i] = true;// 长度为 1 的所有子串都是回文的

		for (int k = 2; k <= n; k++)//先枚举长度
		{
   
			for (int i = 0; i < n; i++)//枚举起点
			{
   
				int j = k + i - 1;//枚举终点
				if (j >= n)//越界
					break;
                //当前的起点和终点相同;2,3个的情况 || 中间的是回文串
				if (ss[i] == ss[j] && (j - i < 3 || f[i + 1][j - 1]))
					f[i][j] = true;

				if (f[i][j] && j - i + 1 > maxLen)
				{
   
					maxLen = j - i + 1;
					begin = i;
				}
			}
		}
		return s.substring(begin, begin + maxLen);
	}
}

相关推荐

  1. Leetcode5--最(双指针中心扩散

    2024-02-01 13:08:05       10 阅读
  2. 每日OJ_dp⑤_516. 最序列

    2024-02-01 13:08:05       14 阅读
  3. LeetCode热Hot100 - 最

    2024-02-01 13:08:05       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-01 13:08:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-01 13:08:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-01 13:08:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-01 13:08:05       18 阅读

热门阅读

  1. 影响PCBA制造成本的因素有哪些?

    2024-02-01 13:08:05       35 阅读
  2. 【Spring框架】@Cacheable注解:缓存最佳实践

    2024-02-01 13:08:05       35 阅读
  3. ffmpeg 从视频文件抓取图片 (帧)的用法

    2024-02-01 13:08:05       29 阅读
  4. docker概念和常见命令

    2024-02-01 13:08:05       35 阅读
  5. Fiddler-03总结

    2024-02-01 13:08:05       27 阅读
  6. Kerberos安装

    2024-02-01 13:08:05       30 阅读
  7. [python] 使用sqlparse 解析和美化SQL

    2024-02-01 13:08:05       23 阅读
  8. Linux 分卷压缩命令

    2024-02-01 13:08:05       37 阅读
  9. MongoDB 中的事务

    2024-02-01 13:08:05       35 阅读