最长回文子串算法——C语言实现
·
问题:提供一个字符串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;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)