最大子序列是指子串与母串相比顺序不变且子串的字符与母串相等。这里有字符串str1 = CNBLOG , str2 = BELONG,则它的最大子序列为BLOG,虽然N也相等但是顺序不对。最大子串指str1与str2相同且连续的部分,也就是LO。
求解最大子序列,先定义最大子序列长度LCS[i,j] = LCS[i-1,j] + 1 (str1[i]==str2[j]) 或 LCS[i,j] = max{LCS[i,j-1],LCS[i-1,j]} (str1 != str2)。此时,LCS[str1.length,str2.length]的值为最大子序列的长度,如何得到最大子序列,我们观察一下LCS数组:
为了保证有序,从j=1开始,只要LCS[i,j] > LCS[i,j-1] 且 LCS[i,j]>LCS[i-1,j]那么 str1[i-1]的值必然与str2[j-1]的值相等,此时需记住j的值(为保证有序)在下一次比较时从j后的值开始比较大小。
求解最大子串,先定义最大子串长度 LSTR[i,j] = LSTR[i-1,j-1] + 1 (str1[i] == str2[j]) 或 LSTR[i,j] = 0 (str1[i] != str2[j]),然后找到LSTR的最大值,最大值为最长子串。