LeetCode——最长回文子串

题目地址:https://leetcode-cn.com/problems/longest-palindromic-substring/

解题思路:简单的动态规划

需要注意的是:如果使用C编译器,直接定义char returnS[1005],最后结果始终输出为null(不知道为什么)。要使用malloc分配内存。

 

 

char * longestPalindrome(char * s) {
    bool dp[1005][1005];
    //dp[i][j]:表示的是从i到j的字符串是否为回文串
    memset(dp, 0, sizeof(dp));
    int i, j;
    int len;
    char *returnS = (char *)malloc(sizeof(char) * 1005);
    memset(returnS, 0, sizeof(returnS));
    for (len = 1; len <= strlen(s); len++)//记录长度为len的回文串的起始和终点下标
        for (i = 0; i + len <= strlen(s); i++) {
            j = i + len - 1;
            if (len == 1)//初始化,所有单个字符都是回文串
                dp[i][j] = true;
            else if (len == 2)
                dp[i][j] = (s[i] == s[j]);
            else
                dp[i][j] = dp[i + 1][j - 1] && (s[i] == s[j]);
            if (dp[i][j] && len >= strlen(returnS)) {//如果该串是回文串并且长度比上一次长,那么记录下来
                memcpy(returnS, s + i, len);
                returnS[len] = '\0';
            }
        }
    return returnS;
}

 

posted @ 2020-07-07 17:42  CCxiao5  阅读(121)  评论(0编辑  收藏  举报