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月前
|
机器学习/深度学习 测试技术 Windows
【动态规划】【回文】【字符串】1147. 段式回文
【动态规划】【回文】【字符串】1147. 段式回文
|
18天前
|
人工智能 算法
最长公共子串
最长公共子串
10 2
|
2月前
leetcode-5:最长回文子串
leetcode-5:最长回文子串
28 0
|
2月前
|
存储 算法 Go
LeetCode第五题: 最长回文子串
给定一个字符串 `s`​,找到 `s`​ 中最长的回文子串。你可以假设 `s`​ 的最大长度为 1000。
LeetCode第五题: 最长回文子串
|
2月前
leetcode-647:回文子串
leetcode-647:回文子串
17 0
|
10月前
|
算法
LeetCode5-最长回文子串
LeetCode5-最长回文子串
|
11月前
|
算法
LeetCode-5 最长回文子串
LeetCode-5 最长回文子串
|
Java C++ Python