问题:提供一个字符串s,找出字符数组s中最长的回文子串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
解答:这本来是一道经典的动态规划题目,在力扣、牛客等练习平台上皆有解题思路与代码,然而解决办法中很少用C语言实现,为此本文特意用C语言进行实现。
代码
char * longestPalindrome(char * s){
if (s == NULL || strlen(s) < 2) {
return s;
}
int dp[1000][1000] = {0};
int maxLen = 1;
int startP = 0;
int endP = 0;
for (int i = 1; i < strlen(s); i++) {
for (int j = 0; j < i; j++) {
if ((s[i] == s[j]) && (((i -j) <= 2) || (dp[i - 1][j + 1] == 1))) {
dp[i][j] = 1;
if (i - j + 1 > maxLen) {
maxLen = i - j + 1;
startP = j;
endP = i;
}
}
}
}
char *ret = (char *)malloc(sizeof(char) * (maxLen + 1));
for (int i = 0; i < maxLen; i++){
ret[i] = s[i + startP];
}
ret[maxLen] = 0;
return ret;
}