美文网首页
5. 最长回文子串 难度:中等

5. 最长回文子串 难度:中等

作者: vincewi | 来源:发表于2021-02-16 18:23 被阅读0次

    题目描述:

    给你一个字符串 s,找到 s 中最长的回文子串。

    示例1:

    输入:s = "babad"
    输出:"bab"
    解释:"aba" 同样是符合题意的答案。

    示例2:

    输入:s = "cbbd"
    输出:"bb"

    示例3:

    输入:s = "a"
    输出:"a"

    示例4:

    输入:s = "ac"
    输出:"a"

    提示

    • 1 <= s.length <= 1000
    • s 仅由数字和英文字母(大写和/或小写)组成

    思路

    动态规划

    代码示例:

    char * longestPalindrome(char * s){
        int dp[1001][1001] = {0};
        int n = strlen(s);
        int len = 0, i = 0;
        int start = 0, end = 0;
        for(len = 0; len < n; ++len) {
            for(i = 0; i + len < n; ++i) {
                int j = i + len;
                if(len == 0) {
                    dp[i][j] = 1;
                } else if(len == 1) {
                    dp[i][j] = s[i] == s[j];
                } else {
                    dp[i][j] = (s[i] == s[j]) && dp[i + 1][j - 1];
                }
                if(dp[i][j] && (len > end - start)) {
                    start = i;
                    end = j;
                }
            }
        }
        s[end + 1] = '\0';
        return s + start;
    }
    

    相关文章

      网友评论

          本文标题:5. 最长回文子串 难度:中等

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