动态规划之最长连续公共子序列
2014-09-12 15:57
211 查看
#include <IOSTREAM> #include <CSTRING> #include <CASSERT> using namespace std; //最长连续公共子序列 int MaxLength(const char*str1, const char* str2, int str1_len, int str2_len) {//对str1[0:str1_len]与str2[0:str2_len-1]处理 int c[100][100] = {0} ;//c[i]j]表示以str1[i-1]和str2[j-1]字符为结尾的子串之间的最长连续公共子串, //i,j不再表示str1[i]和str2[j],而是表示str1和str2长度的概念,与str1[i-1]和str2[j-1]对应 int maxlen = 0; int i=0, j=0; assert(str1 != NULL && str2 != NULL); for (i=0; i<=str1_len; ++i) c[i][0] = 0; //c[i][0]表示str2的长度为0的情况; for (j=0; j<=str2_len; ++j) c[0][j] = 0; //c[0][j]表示str1的长度为0的情况 for (i=1; i<=str1_len; ++i) for (j=1; j<=str2_len; ++j) if (str1[i-1] == str2[j-1]) { c[i][j] = c[i-1][j-1] + 1; if (c[i][j] > maxlen) maxlen = c[i][j]; } else { c[i][j] = 0; } return maxlen; }
//最长连续公共子序列 int MaxLength2(const char*str1, const char* str2, int str1_len, int str2_len) {// int c[100][100] = {0} ;//c[i]j]表示以str1[i]和str2[j]字符为结尾的子串之间的最长连续公共子串, int i =0; int j = 0; int maxlen = 0; assert(str1 != NULL && str2 != NULL); //处理字符串长度为0的情况 if (str1_len == 0 || str2_len ==0) return 0; //必须从0开始,因为c[0][0]==0,会用到 for (i=0; i<=str1_len; ++i) if (str1[i] == str2[0]) c[i][0] = 1; else c[i][0] = 0; for (j=0; j<=str2_len; ++j) if (str1[0] == str2[j]) c[0][j] = 1; else c[0][j] = 0; for (i=1; i<str1_len; ++i) for (j=1; j<str2_len; ++j) if (str1[i] == str2[j]) { c[i][j] = c[i-1][j-1] + 1; if (c[i][j] > maxlen) maxlen = c[i][j]; } else { c[i][j] = 0; } return maxlen; }
//注意以上两种思想的异同点
int main() { char arr[] = "cdab"; char brr[] = "abcd"; cout << MaxLength(arr, brr, strlen(arr), strlen(brr)) << endl; return 0; }
相关文章推荐
- 动态规划之最大公共序列+最长上升子序列
- 动态规划之最长公共子序列和最长公共字串,最大子序列和
- 动态规划-----最长公共连续子串
- 动态规划--最长公共字序列
- 动态规划 最长公共子序列LCS、最长公共连续子串、最长重复子串
- 动态规划---最长的公共子序列java版本
- 动态规划 之 【最长公共序列】 LCS算法
- 动态规划---求最长公共字符序列
- 动态规划求解最长公共子串与公共子序列
- 最大连续子序列和,乘积,最长递增子串,最长公共子串,子序列等问题(动态规划等)
- poj 1080(动态规划之最长公共之序列)
- 动态规划 最长公共子序列 最长上升子序列 最长上升公共子序列
- 动态规划 - 最长公共子序列 - 最长公共子串 - 最长不重复子串 - 最长递增子序列 - 最长回文子串
- 最长公共子序列 最长递增子序列(和) 最长递增公共子序列 最长(连续)子序列乘积(HDU)--dp
- 动态规划求最长公共子串
- C++动态规划之最长公子序列实例
- 动态规划:最长上升子序列(二分算法 nlogn)
- 最长上升非降子序列的长度动态规划
- 动态规划 最长递增子序列 oj合唱团问题
- 如何求最长连续公共子序列和最长连续子字符串