0.公共子序列和公共子串的区别
结合图理解dp【i】【j】值的具体意义。。是指dp【0】【1】,dp【0】【2】-------dp【0】【j】(字符串1的A与字符串B的前1个即B的公共子序列,字符串1的A与字符串2的前2个即BD的公共子序列,------
                                                                                                                                                           ----,字符串1的A与字符串B的前j个的公共子序列
                                                                          dp【1】【1】,dp【1】【2】-------dp【1】【j】 (字符串1的AB与字符串B的前1个即B的公共子序列,字符串1的AB与字符串2的前2个即BD的公共子序列,------
                                                                                                                                                           ----,字符串1的AB与字符串2的前j个的公共子序列)
                                                                            |                                                                                            |
                                                                            |                                                                                             |
                                                                          dp【i】【1】,dp【1】【j】-------dp【i】【j】(整个字符串1与字符串B的前1个即B的公共子序列,整个字符串1与字符串B的前2个即BD的公共子序列,------                                                                                                                                                           ----,整个字符串1与字符串2的前j个(整个字符串B)的公共子序列)
  理解状态方程: 
  • 遍历两个字符串的所有位置,开始状态转移:若是i位与j位的字符相等,则该问题可以变成dp[i][j]=1+dp[i−1][j−1],即到此处为止最长公共子序列长度由前面的结果加1。//即是代码中,相等取左上对角线的值加1
  • 若是不相等,说明到此处为止的子串,最后一位不可能同时属于最长公共子序列,毕竟它们都不相同,因此我们考虑换成两个子问题并去较大值,max(dp[i][j−1],dp[i−1][j])//即是代码中的取ij位置左边或者上面较                                                                                                                                                                                                                                                                                         大的dp值值。                                        重点在于理解不相等的状态转移方程。     如果字符串1的i位字符串2的j位不相等,那么对于这时的dp[i][j],最大子串一定是在之前找到过的串中的。那么是在字符串1中找呢,还是在字符串2中找,答案是两个都找找看,然后较大就是当前的dp【i】【j】值。填dp的顺序是依次从左往右,从上往下。 加入现在要找dp【5】【4】,那么就是循环中i=5,j从1-》2-》----》5  i=5,即字符串1的D。j=4 ,即字符串2的A。D≠A,往左看看,意思就是,字符串1的ABCBD ,字符串2的BDC最大的匹配 ,往上看看,意思就是  字符串1的ABCB ,字符串2的BDCA最大的匹配 ,      就是不确定 字符串加入了i(D) 还还是加入了j(A)的最大子串大,而且只能在这里面产生,因为i位置与j的字符不相等。