Day53
class Solution {
public int longestCommonSubsequence ( String text1, String text2) {
int dp[ ] [ ] = new int [ text1. length ( ) + 1 ] [ text2. length ( ) + 1 ] ;
for ( int i = 1 ; i <= text1. length ( ) ; i++ ) {
char char1 = text1. charAt ( i - 1 ) ;
for ( int j = 1 ; j <= text2. length ( ) ; j++ ) {
char char2 = text2. charAt ( j - 1 ) ;
if ( char1 == char2) {
dp[ i] [ j] = dp[ i - 1 ] [ j - 1 ] + 1 ;
} else {
dp[ i] [ j] = Math . max ( dp[ i - 1 ] [ j] , dp[ i] [ j - 1 ] ) ;
}
}
}
return dp[ text1. length ( ) ] [ text2. length ( ) ] ;
}
}
class Solution {
public int maxUncrossedLines ( int [ ] nums1, int [ ] nums2) {
int n = nums1. length;
int m = nums2. length;
int dp[ ] [ ] = new int [ n + 1 ] [ m + 1 ] ;
for ( int i = 1 ; i <= n; i++ ) {
for ( int j = 1 ; j <= m; j++ ) {
if ( nums1[ i - 1 ] == nums2[ j - 1 ] ) dp[ i] [ j] = dp[ i - 1 ] [ j - 1 ] + 1 ;
else dp[ i] [ j] = Math . max ( dp[ i - 1 ] [ j] , dp[ i] [ j - 1 ] ) ;
}
}
return dp[ n] [ m] ;
}
}
class Solution {
public int maxSubArray ( int [ ] nums) {
int n = nums. length;
int res = nums[ 0 ] ;
int dp[ ] = new int [ n] ;
for ( int i = 0 ; i < n; i++ ) dp[ i] = nums[ i] ;
for ( int i = 1 ; i < n; i++ ) {
dp[ i] = Math . max ( dp[ i - 1 ] + nums[ i] , dp[ i] ) ;
res = Math . max ( res, dp[ i] ) ;
}
return res;
}
}