#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 5;
char s[maxn], t[maxn];
int pos[maxn][30];
int main()
{
int n, m; scanf("%d%d", &n, &m);
scanf("%s%s", s + 1, t + 1);
for (int i = 0; i < 26; ++i) pos[n][i] = n + 1;
for (int i = n; i >= 1; --i) {
for (int j = 0; j < 26; ++j) pos[i - 1][j] = pos[i][j];
pos[i - 1][s[i] - 'a'] = i;
}
int ans = -1;
int cur = 0, p;
for (int i = 1; i <= m; ++i) {
for (int j = t[i] - 'a' + 1; j < 26; ++j) {
if (pos[cur][j] == n + 1) continue;
ans = max(ans, n - pos[cur][j] + i);
}
cur = pos[cur][t[i] - 'a'];
if (cur == n + 1) break;
}
if (cur < n) ans = max(ans, n - cur + m);
printf("%d\n", ans);
}
2019icpc 徐州网络赛 M-longest subsequence - 序列自动机
最新推荐文章于 2021-03-02 17:23:04 发布