蓝桥杯国赛指南,详情见专栏
文章目录
- Question
- Ideas
- Code
Question
给定两个长度分别为 N 和 M 的字符串 A 和 B,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。
输入格式
第一行包含两个整数 N 和 M。
第二行包含一个长度为 N 的字符串,表示字符串 A。
第三行包含一个长度为 M 的字符串,表示字符串 B。
字符串均由小写字母构成。
输出格式
输出一个整数,表示最大长度。
数据范围
1≤N,M≤1000
输入样例:
4 5
acbd
abedc
输出样例:
3
Ideas
dp一个很经典的模型,遇到两个字符串状态定义为两维
Code
# O(N^2)
N = 1010
f = [[0 for i in range(N)] for j in range(N)]
n,m = list(map(int,input().strip().split()))
a = '0'+input()
b = '0'+input()
for i in range(1,n+1):
for j in range(1,m+1):
f[i][j] = max(f[i-1][j],f[i][j-1])
if a[i] == b[j]:
f[i][j] = max(f[i][j],f[i-1][j-1]+1)
print(f[n][m])