This is a dynamic programming problem. Reference:http://blog.csdn.net/abcjennifer/article/details/7735272 By the time I got to this problem, I honestly felt like I couldn’t keep going. The problem itself isn’t that complex, but I felt like my brain was too slow.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class Solution {
public :
int minDistance ( string word1 , string word2 ) {
len1 = word1 . length ();
len2 = word2 . length ();
initdptable ();
for ( int i = 1 ; i <= len1 ; i ++ ) {
for ( int j = 1 ; j <= len2 ; j ++ ) {
dpTable [ i ][ j ] = getMin ( word1 [ i - 1 ] == word2 [ j - 1 ] ? dpTable [ i - 1 ][ j - 1 ] : dpTable [ i - 1 ][ j - 1 ] + 1 , dpTable [ i - 1 ][ j ] + 1 , dpTable [ i ][ j - 1 ] + 1 );
}
}
//displaydptable();
return dpTable [ len1 ][ len2 ];
}
private :
int ** dpTable ;
int len1 , len2 ;
int getMin ( int a , int b , int c ) {
int min = a ;
if ( min > b ) min = b ;
if ( min > c ) min = c ;
return min ;
}
void initdptable () {
dpTable = new int * [ len1 + 1 ];
for ( int i = 0 ; i <= len1 ; i ++ ) {
dpTable [ i ] = new int [ len2 + 1 ];
}
for ( int i = 0 ; i <= len1 ; i ++ ) {
dpTable [ i ][ 0 ] = i ;
}
for ( int i = 0 ; i <= len2 ; i ++ ) {
dpTable [ 0 ][ i ] = i ;
}
}
void displaydptable () {
for ( int i = 0 ; i <= len1 ; i ++ ) {
for ( int j = 0 ; j <= len2 ; j ++ ) {
cout << dpTable [ i ][ j ] << " " ;
}
cout << endl ;
}
}
};
Licensed under CC BY-NC-SA 4.0