Skip to content

Commit 305e143

Browse files
committed
lcs finish
1 parent 8abd2e3 commit 305e143

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

DP-LCS.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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("\nend")
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

Comments
 (0)