题目链接:300.最长递增子序列 dp初始化为1(最小子序列长度为1) class  Solution ( object ) : def  lengthOfLIS ( self,  nums) : """:type nums: List[int]:rtype: int""" dp =  [ 1 ] * len ( nums) result =  1 for  i in  range ( 1 ,  len ( nums) ) : for  j in  range ( i) : if  nums[ i] > nums[ j] : dp[ i] = max ( dp[ i] ,  dp[ j] + 1 ) result =  max ( dp[ i] ,  result) return  result
class  Solution ( object ) : def  findLengthOfLCIS ( self,  nums) : """:type nums: List[int]:rtype: int""" dp =  [ 1 ] * len ( nums) result =  1 for  i in  range ( 1 ,  len ( nums) ) : if  nums[ i] > nums[ i- 1 ] : dp[ i] = dp[ i- 1 ] + 1 result =  max ( dp[ i] ,  result) return  result
题目链接:718. 最长重复子数组 dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。 (特别注意 : “以下标i - 1为结尾的A” 标明一定是 以A[i-1]为结尾的字符串 ) 定义dp[i][j]为 以下标i为结尾的A,和以下标j为结尾的B,最长重复子数组长度的问题:需要单独处理初始化部分。 class  Solution ( object ) : def  findLength ( self,  nums1,  nums2) : """:type nums1: List[int]:type nums2: List[int]:rtype: int""" dp =  [ [ 0 ] * ( len ( nums2) + 1 )  for  k in  range ( len ( nums1) + 1 ) ] result =  0 for  i in  range ( 1 ,  len ( nums1) + 1 ) : for  j in  range ( 1 ,  len ( nums2) + 1 ) : if  nums1[ i- 1 ] == nums2[ j- 1 ] : dp[ i] [ j] = dp[ i- 1 ] [ j- 1 ] + 1 result =  max ( dp[ i] [ j] ,  result) return  result