class Solution {
public : int minDistance ( string word1, string word2) { vector< vector< int >> dp ( word1. size ( ) + 1 , vector < int > ( word2. size ( ) + 1 , 0 ) ) ; for ( int i = 1 ; i <= word1. size ( ) ; i++ ) { for ( int j = 1 ; j <= word2. size ( ) ; j++ ) { if ( word1[ i - 1 ] == word2[ j - 1 ] ) dp[ i] [ j] = dp[ i - 1 ] [ j - 1 ] + 1 ; else dp[ i] [ j] = max ( dp[ i] [ j - 1 ] , dp[ i - 1 ] [ j] ) ; } } return word1. size ( ) + word2. size ( ) - dp[ word1. size ( ) ] [ word2. size ( ) ] * 2 ; }
} ;
class Solution {
public : int minDistance ( string word1, string word2) { vector< vector< int >> dp ( word1. size ( ) + 1 , vector < int > ( word2. size ( ) + 1 , 0 ) ) ; for ( int i = 1 ; i <= word1. size ( ) ; i++ ) dp[ i] [ 0 ] = i; for ( int i = 1 ; i <= word2. size ( ) ; i++ ) dp[ 0 ] [ i] = i; for ( int i = 1 ; i <= word1. size ( ) ; i++ ) { for ( int j = 1 ; j <= word2. size ( ) ; j++ ) { if ( word1[ i - 1 ] == word2[ j - 1 ] ) dp[ i] [ j] = dp[ i - 1 ] [ j - 1 ] ; if ( word1[ i - 1 ] != word2[ j - 1 ] ) dp[ i] [ j] = min ( { dp[ i - 1 ] [ j - 1 ] , dp[ i] [ j - 1 ] , dp[ i - 1 ] [ j] } ) + 1 ; } } return dp[ word1. size ( ) ] [ word2. size ( ) ] ; }
} ;