1143.|1143. 最长公共子序列/5. 最长回文子串
1143. 最长公共子序列
- 相关标签: DP
#define BUFLEN 1001
#define MAX(x,y) (x > y ? x : y)
int longestCommonSubsequence(char * text1, char * text2){int dp[BUFLEN][BUFLEN] = {0};
int res = 0;
for (int i = 0;
i < strlen(text1);
i++) {
for (int j = 0;
j < strlen(text2);
j++) {dp[i + 1][j + 1] = (text1[i] == text2[j]) ? dp[i][j] + 1 : MAX(dp[i][j + 1], dp[i + 1][j]);
}
}return dp[strlen(text1)][strlen(text2)];
}
5. 最长回文子串
- 相关标签 :DP
/*
1. N * ( 双指针两边拓展)2. 正 , 反-》 最长公共子串-》 DPdp[i][j] = dp[i-1][j-1] + 1不对 回文 不一样。。 dp[i][j] 表示 i..j 是不是 回文 -- 》dp[i+1][j-1] 是不是回文*/// #define R(idx, len) (len - 1 - idx)// reverse
#define BUFLEN 1001
char * longestPalindrome(char * s){if (strlen(s) == 0 || strlen(s) == 1) {
return s;
}int dp[BUFLEN][BUFLEN] = {0};
int maxi = 0;
int max = 0;
for (int j = 0;
j < strlen(s);
j++) {
for (int i = 0;
i <= j ;
i++) {
dp[i + 1][j +1] = (s[i] == s[j]) && (j - i <= 2|| dp[i+2][j]);
if (dp[i + 1][j +1] && j - i >= max) {
max = j - i + 1;
maxi = i;
}}
}// for (int i = 0;
i <= strlen(s);
i++) {
// for (int j = 0;
j <= strlen(s);
j++) {
//printf("%d ", dp[i][j]);
// }
// printf("\n");
// }printf("%d %d\n", maxi, max);
char *res = (char *)malloc(max + 1);
// “\0” max + 1
memset(res, 0, max + 1);
memcpy(res, &s[maxi], max);
return res;
}
推荐阅读
- SpringBoot调用公共模块的自定义注解失效的解决
- 我们都是普通人
- 【golang】leetcode中级-字母异位词分组&无重复字符的最长子串
- LeetCode算法题-14.|LeetCode算法题-14. 最长公共前缀(Swift)
- [dp]最长公共子序列
- 上海国际艺术节,安徽画无限学生,公共艺术活动开始
- 企业物联网平台新版公共实例升级企业实例教程
- 【golang】leetcode初级-最长公共前缀&删除链表中的节点
- 二叉树递归套路(4)(最低公共祖先、派对的最大快乐值)
- 常见排序算法实现(TS 版)