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; }