题解 | #最长公共子序列(二)#
最长公共子序列(二)
http://www.nowcoder.com/practice/6d29638c85bb4ffd80c020fe244baf11
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # longest common subsequence # @param s1 string字符串 the string # @param s2 string字符串 the string # @return string字符串 # class Solution: def LCS(self , s1: str, s2: str) -> str: # write code here m = len(s1) n = len(s2) dp = [[0] * (n + 1) for i in range(m + 1)] flag = [[0] * n for i in range(m)] for i in range(1, m + 1): for j in range(1, n + 1): if s1[i - 1] == s2[j - 1]: dp[i][j] = dp[i - 1][j - 1] + 1 flag[i - 1][j - 1] = 'ok' else: if dp[i][j - 1] > dp[i - 1][j]: dp[i][j] = dp[i][j - 1] flag[i - 1][j -1] = 'left' else: dp[i][j] = dp[i - 1][j] flag[i - 1][j -1] = 'up' res = '' m1 = m - 1 n1 = n - 1 while m1 >= 0 and n1 >= 0: if flag[m1][n1] == 'ok': res += s1[m1] m1 -= 1 n1 -= 1 elif flag[m1][n1] == 'left': n1 -= 1 else: m1 -= 1 res = res[::-1] if res else -1 return res