@@ -9,4 +9,65 @@ func main() {
99 fmt .Println ("Dynamic programming LCS" )
1010 str1 := "ABCBDAB"
1111 str2 := "BDCABA"
12+
13+ fmt .Println (str1 [1 ] == 'B' )
14+
15+ l1 := len (str1 )
16+ l2 := len (str2 )
17+ fmt .Println (str1 , str2 , l1 , l2 )
18+ d2 := LCS (str1 , str2 , l1 , l2 )
19+ printLCS (d2 , str1 , l1 , l2 )
20+ fmt .Println ("\n end" )
21+ }
22+
23+ func LCS (str1 string , str2 string , l1 int , l2 int ) [10 ][10 ]int {
24+
25+ var d1 [10 ][10 ]int //make([][]int, 10, 10)
26+ var d2 [10 ][10 ]int //make([][]int, 10, 10)
27+
28+ for i := 0 ; i < l1 ; i ++ {
29+ d1 [i ][0 ] = 0
30+ }
31+ for i := 0 ; i < l2 ; i ++ {
32+ d1 [0 ][i ] = 0
33+ }
34+
35+ for i := 1 ; i <= l1 ; i ++ {
36+ for j := 1 ; j <= l2 ; j ++ {
37+ if str1 [i - 1 ] == str2 [j - 1 ] {
38+ d1 [i ][j ] = d1 [i - 1 ][j - 1 ] + 1
39+ d2 [i ][j ] = 1
40+ } else if d1 [i - 1 ][j ] >= d1 [i ][j - 1 ] {
41+ d1 [i ][j ] = d1 [i - 1 ][j ]
42+ d2 [i ][j ] = 3
43+ } else {
44+ d1 [i ][j ] = d1 [i ][j - 1 ]
45+ d2 [i ][j ] = 2
46+ }
47+ }
48+ }
49+ for _ , value := range d2 {
50+ fmt .Println (value )
51+ }
52+ fmt .Println ("-------------------" )
53+ for _ , value := range d1 {
54+ fmt .Println (value )
55+ }
56+ return d2
57+ }
58+
59+ func printLCS (b [10 ][10 ]int , str1 string , i int , j int ) {
60+
61+ if i < 0 || j < 0 {
62+ return
63+ }
64+ fmt .Println (i , j )
65+ if b [i ][j ] == 1 {
66+ printLCS (b , str1 , i - 1 , j - 1 )
67+ fmt .Printf ("%s" , string (str1 [i - 1 ]))
68+ } else if b [i ][j ] == 3 {
69+ printLCS (b , str1 , i - 1 , j )
70+ } else {
71+ printLCS (b , str1 , i , j - 1 )
72+ }
1273}
0 commit comments