import sys s, t = input(), input() if len(s)<len(t): s, t = t, s s_n, t_n = len(s), len(t) dp = [[0] * (t_n+1) for _ in range(s_n+1)] # print(s, t) max_v, max_i, max_j = 0, -1, -1 for i in range(1, s_n+1): for j in range(1, t_n+1): dp[i][j] = dp[i-1][j-1] + 1 if s[i-1]==t[j-1] else 0 if dp[i][j] > max_v: max_v, max_i, max_j = dp[i][j], i-1, j-1 elif dp[i][j] == max_v and (j-1) < max_j: max_i, max_j = i-1, j-1# s作为行,保证最短的第一次搜索到 # print(max_v, max_i, max_j) print(s[(max_i - max_v+1):(max_i+1)])
遇到最长最短,首选动态规划。其中输出结果要求最短串中最先出现,因此在判断时需要额外条件更新子串的索引。