美文网首页
最长回文子串

最长回文子串

作者: 乘瓠散人 | 来源:发表于2021-07-21 13:57 被阅读0次

题目:给你一个字符串s, 找到s中最长的回文子串。
解法:动态规划
dp[i][j] 表示字符串s的下标ij 构成的子串s[i:j] 是否为回文串。则有
dp[i][j] = dp[i+1][j-1] && (s[i]==s[j])

此外,注意在状态转移方程中,是从长度较短的字符串向长度较长的字符串进行转移,因此要注意动态规划的循环顺序。

string longestPalindrome(string s) {
    int n = s.length();
    if (n == 0) return "";

    bool dp[n][n];
    int res = 1;
    string resStr = s.substr(0, 1);

    for (int i=0; i<n; i++) {
        dp[i][i] = true;
        if (i+1 < n) {
            dp[i][i+1] = (s[i]==s[i+1]);
            if (dp[i][i+1]) {
                res = 2;
                resStr = s.substr(i, 2);
            }
        }
    }

    for (int L=2; L<=n; L++) {
        for (int i=0; i<n+1-L; i++) {
            int j = i + L - 1;
            if (s[i] == s[j]) {
                if (i+1 <= j-1) dp[i][j] = dp[i+1][j-1];
            } else {
                dp[i][j] = false;
            }
            if (dp[i][j]) {
                int cnt = j - i + 1;
                if (cnt > res) {
                    res = cnt;
                    resStr = s.substr(i, cnt);
                }
            }
        }
    }
    return resStr;
}

相关文章

  • 最长回文子串

    最长回文子串——Manacher 算法 1. 问题定义 最长回文字符串问题:给定一个字符串,求它的最长回文子串长度...

  • 字符串算法

    最长公共前缀 最长回文串 最长回文子序列 最长公共子串 反转单词顺序列 反转字符串 字符串转数字 IP-int互转

  • 打卡-最长回文子串

    最长回文子串(中等)

  • 最长回文子序列

    该问题区别于最长回文子串,子串必须是连续的,而子序列则可以跳跃,例如AABCAA的最长回文子串为AA,但是它的最长...

  • Manacher算法

    最长回文子串问题# 给定一个字符串,找出最长的回文子串,如"waabwswbfd",则最长子串为bwsb. 中心试...

  • 最长回文子串问题—Manacher算法

    最长回文串问题是一个经典的算法题。 0. 问题定义 最长回文子串问题:给定一个字符串,求它的最长回文子串长度。如果...

  • LeetCode 第647题:回文子串

    1、前言 2、思路 此题与最长回文子串很像,只不过那个是求最长的回文子串,而这个是求回文子串的数目。但是他们的解法...

  • C语言实现求最长回文子串

    最长回文子串的概念 回文串是指正序和反序都一样的字符串,例如:Str1 = "AbbA",则Str1的最长回文子串...

  • Manacher's Algorithm算法分析Java

    Manacher's Algorithm俗称马拉车算法,对于求字符串中最长回文子串效率极高。 在求最长回文子串的时...

  • Manacher 算法学习笔记

    前言 给定一个字符串,求出其最长回文子串。例如:s="abcd",最长回文长度为 1;s="ababa",最长回文...

网友评论

      本文标题:最长回文子串

      本文链接:https://www.haomeiwen.com/subject/kgrjmltx.html