最长公共子序列
最长公共子序列(LCS)
- 子串:表示连续的一串字符 。
- 子序列:表示不连续的一串字符。
其实LCS看起来很麻烦,找不到思路,如果暴力破解可能要O(n^4)了,而这个题目使用动态规划的思想也非常简单,
是因为之前的动态规划问题例如:背包问题,生产线问题,都是一维数组空间内的结果,规划到一个线性时间内,而这个题目需要O(m*n)的时间复杂度和空间复杂度。
思路:

废话不多说,代码 走起:
int lcs(string a,string b) { int max_=0; memset(v,0,sizeof(v)); a=' '+a; b=' '+b; for(int i=1;i<a.length();++i) c[i][0]=0; for(int j=1;j<b.length();++j) c[0][j]=0; for(int i=1;i<a.length();++i) for(int j=1;j<b.length();++j) { if(a[i]==b[j]) { v[i][j]=v[i-1][j-1]+1; } else { v[i][j]=max(v[i-1][j],v[i][j-1]); } max_=max(max_,v[i][j]); } return max_; }

浙公网安备 33010602011771号