package main import ( "fmt" ) func main() { var str1 string var str2 string for { n, _ := fmt.Scan(&str1, &str2) if n == 0 { break } else { dp := make([][]int, len(str1)+1) for i := 0; i < len(dp); i++ { dp[i] = make([]int, len(str2)+1) } for i := 1; i < len(dp); i++ { for j := 1; j < len(dp[i]); j++ { if str1[i-1] == str2[j-1] { dp[i][j] = dp[i-1][j-1] + 1 } else { dp[i][j] = max(dp[i-1][j], dp[i][j-1]) } } } i, j := len(str1), len(str2) k := dp[i][j] res := make([]byte, dp[i][j]) // 利用已有dp 反着找数据 for k>0 { if str1[i-1] == str2[j-1] { // str1[i-1] == str2[j-1], // 原来 dp[i][j] = dp[i-1][j-1] + 1 // 反着操作, res[k-1] = str1[i-1] k-- i-- j-- // dp[i][j] = max(dp[i-1][j], dp[i][j-1]) // dp[i-1][j]>dp[i][j-1] i-- // dp[i-1][j]<=dp[i][j-1] j-- } else if dp[i-1][j] > dp[i][j-1] { i-- } else { j-- } } if len(res) > 0 { fmt.Println(string(res)) } else { fmt.Println(-1) } } } } func max(a, b int) int { if a > b { return a } return b }