最长公共子串
给定两个字符串str1和str2,输出两个字符串的最长公共子序列。如果最长公共子序列为空,则返回"-1"。目前给出的数据,仅仅会存在一个最长的公共子序列
输入、
"1A2C3D4B56","B1D23A456A
输出
“2345”
状态转换方程:
s1[i] == s2[j] ---> dp[i][j] = dp[i-1][j--1] + 1
s1[i] != s2[j] ---> dp[i][j] = 0
func LCS( str1 string , str2 string ) string{
row := len(str1)
col := len(str2)
if row==0 || col==0 {
return ""
}
dp := make([][]int, row+1)
for i:=0;i<row+1;i++{
dp[i] = make([]int, col+1)
}
for i:=0;i<row+1;i++ {
dp[i][0] = 0
}
for i:=0;i<col+1;i++ {
dp[0][i] = 0
}
max := 0
endIndex := 0
for i:=1;i<=row;i++{
for j:=1;j<=col;j++ {
if str1[i-1] == str2[j-1]{
dp[i][j] = dp[i-1][j-1]+1
}else{
dp[i][j] = 0
}
if dp[i][j] > max {
max = dp[i][j]
endIndex = i
}
}
}
return str1[endIndex-max:endIndex]
}