当前位置: 首页 > 知识库问答 >
问题:

最长回文子串长度

丁念
2023-03-14

下面的代码给出了最长的回文子序列长度。如何修改代码以获得最长的回文子串长度?

public static int lp(String str, int i, int j, int ans) {    
    if (i == str.length() || j <= 0)
        return ans;

    if (i > j)
        return ans;

    if (i == j)
        return ans + 1;

    if (str.charAt(i) == str.charAt(j)) {
        int a = lp(str, i + 1, j, ans);
        int b = lp(str, i, j - 1, ans);
        int c = lp(str, i + 1, j - 1, ans + 2);
        ans = Math.max(Math.max(a, b), c);
        return ans;
    } else {
        int a = lp(str, i + 1, j, ans);
        int b = lp(str, i, j - 1, ans);
        ans = Math.max(a, b);
        return ans;
    }
}

下面是一个示例调用:

    String s = "sbsncjss"; 
    // longest subsequence length is 5 and longest substring length is 3
    System.out.println("Ans is " + lp(s, 0, s.length() - 1, 0));

共有1个答案

太叔高义
2023-03-14

如何修改代码以获得最长的回文子串长度

然后,您需要排除跳过字符的情况。当您的代码即将跳过一个字符时,搜索可以继续,但ans重置为0。

因此:

public static int lp(String str, int i, int j, int ans) {
    if (i == str.length() || j <= 0)
        return ans;

    if (i > j)
        return ans;

    if (i == j)
        return ans + 1;

    if (str.charAt(i) == str.charAt(j)) {
        int a = lp(str, i + 1, j, 0);   // <-- reset!
        int b = lp(str, i, j - 1, 0);   // <-- reset!
        int c = lp(str, i + 1, j - 1, ans + 2);
        ans = Math.max(Math.max(a, b), c);
        return ans;
    } else {
        int a = lp(str, i + 1, j, 0);   // <-- reset!
        int b = lp(str, i, j - 1, 0);   // <-- reset!
        ans = Math.max(a, b);
        return ans;
    }
}

请注意,虽然这是可行的,但有更有效的算法来查找最长的回文子串。但是,它们与您针对最长回文子序列提出的算法完全不同,因此这不仅仅是进行一些更改的问题。

 类似资料:
  • 我正试图从leet代码中解决一个问题。我为此写了一个方法。这在local Eclipse中工作得很好,但是当我在leetcode上提交这个解决方案时,它说超过了时间限制。 有人能给我一些建议吗?我可以在下面的代码中修改一些东西,以使它更快地工作?我也可以在这个帖子中输入字符串。 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

  • 以下是我尝试过的,但在某些情况下失败了,但我觉得我几乎走上了正确的轨道。

  • 我的最新博客地址:我的最新博客 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 实现如下: /** * @param {string} s * @return {string} */

  • 我正在为自己学习DP,我可以轻松解决最长回文子串的长度,但很难真正打印最长回文子串。我检查了一个视频链接,他展示了一种获得LPS的方法,但我无法让它适用于更长的序列。考虑geeksforgeeks的例子: 现在在我的方法中,我将填充表格的底部三角形,如下所示: 因此,对于上述字符串,我的DP表如下所示: 这是视频中原始矩阵的转置,反过来,我不需要单独处理len 1,2, 所以问题是,为什么我在dp

  • 这就是leetcode问题:给定一个字符串s,在s中找到最长的回文子字符串。您可以假定s的最大长度是1000。我的解决方案是使用一个dp表,其中dp[i][j]=以S[i]开始,以S[j]结束的最长回文子字符串的长度 我想知道为什么我的解决方案的时间限制超过了错误,不应该是O(n^2)吗?

  • 005.Longest Palindromic [M] 题目 Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic subst