5.最长回文子串

简介: 5.最长回文子串

找到字符串s中的最长回文子串。

动态规划:将问题分解为子问题。

在本题中 状态转移方程为:P(i,j)=P(i+1,j−1)∧(Si==Sj) //∧求交集,相当于java中的 &&

边界条件:

P(i,i)=true

P(i,i+1)=(Si==Si+1)

 

 

public class Q5 {
    public String longestPalindrome(String s) {
        int n = s.length();
        boolean[] [] dp = new boolean[n][n]; //dp[i][j] 表示子串s[i..j]是否为回文子串
        String ans = "";
        //实际上是按斜对角线填充dp表的上半部分
        for (int len = 0; len < n; len++) {
            for (int i = 0; i+len < n; i++) {
                int j = i+len;
                if (len == 0) {   //单个元素的一定为true
                    dp[i][j] = true;
                }else  if (len == 1) {
                    dp[i][j] = (s.charAt(i) == s.charAt(j));
                }else { //动态规划 --分解为更小的问题dp[i+1][j-1];
                    dp[i][j] = (s.charAt(i) == s.charAt(j) && dp[i+1][j-1]);
                }
                if (dp[i][j] && len+1 >ans.length()) { //更新ans
                    ans = s.substring(i,i+len+1);
                }
            }
        }
        return  ans;
    }
}
相关文章
|
2月前
Leetcode第五题(最长回文子串)
这篇文章介绍了解决LeetCode第五题“最长回文子串”问题的一种方法,使用了中心扩展法来寻找给定字符串中的最长回文子串。
40 0
|
7月前
|
机器学习/深度学习 测试技术 Windows
【动态规划】【回文】【字符串】1147. 段式回文
【动态规划】【回文】【字符串】1147. 段式回文
|
1月前
|
机器学习/深度学习 存储 JavaScript
最长回文子串
给定字符串s,寻找其中最长的回文子串。通过动态规划解决,使用二维数组dp记录子串是否为回文,状态转移方程基于子串两端字符相同及内部子串是否回文。初始条件为单字符和双字符子串的判断。时间复杂度和空间复杂度均为O(n^2)。
31 1
|
2月前
acwing139. 回文子串的最大长度
acwing139. 回文子串的最大长度
16 0
|
4月前
|
算法
LeetCode第5题最长回文子串
该文章介绍了 LeetCode 第 5 题最长回文子串的解法,通过分析回文子串的特点,使用动态规划的思想,用二维数组记录字符串是否为回文串,从后往前遍历找子串,减少重复判断,最终找到最长回文子串,并总结了解题时通过举例推导找规律的思路。
LeetCode第5题最长回文子串
|
7月前
leetcode-5:最长回文子串
leetcode-5:最长回文子串
55 0
|
7月前
|
存储 算法 Go
LeetCode第五题: 最长回文子串
给定一个字符串 `s`​,找到 `s`​ 中最长的回文子串。你可以假设 `s`​ 的最大长度为 1000。
LeetCode第五题: 最长回文子串
|
算法
LeetCode5-最长回文子串
LeetCode5-最长回文子串
【leedcode】0005. 最长回文子串
【leedcode】0005. 最长回文子串
45 0