标签:
题目:求两字符串的最长公共子序列的长度。
题外话:最长公共子串,子序列问题是被充分讨论的问题,网上一搜一大把,请bing之。
本题只要求求最长公共子序列的长度,而不需要记录最长的公共子序列,给予了我们便利,请参考代码:
1 int max(int a, int b) 2 { 3 return a > b ? a : b; 4 } 5 6 int lcs(char* str1, char* str2) 7 { 8 if (str1 == nullptr || str2 == nullptr) 9 { 10 return -1; 11 } 12 13 if (*str1 == ‘\0‘ || *str2 == ‘\0‘) 14 { 15 return 0; 16 } 17 18 if (*str1 == *str2) 19 { 20 return 1 + lcs(str1 + 1, str2 + 1); 21 } 22 23 return max(lcs(str1 + 1, str2), lcs(str1, str2 + 1)); 24 }
其基本思想就是:
LCS(S,T),则有如下情况:
1.S[m] = T[n],那么LCS(Sm,Tn) = LCS(Sm-1,Yn-1) + 1
2.当S[m] != T[n] ,那么LCS(Sm,Tn) 便是 LCS(Sm,Tn-1)和LCS(Sm-1,Tn)中较大者。
标签:
原文地址:http://www.cnblogs.com/joluo/p/4496063.html