给出两个字符串 s 和 t,s 中一定有一个子序列可以构成 t,假设构成 t 的子序列的下标为 ,求
对于 t 的每一个字符,都可以找到 s 中最大匹配的位置和最小匹配的位置,找到之后两相邻字符之间的最大距离即为答案
const int N=5e5+5;
int n,m;
int i,j,k;
char s[N],t[N];
int l[N],r[N];
int main()
{
while(~sdd(n,m)){
ss(s+1); ss(t+1);
if(n==m) pd(1);
else{
int j=1;
for(int i=1;i<=m;i++){
while(j<=n){
if(t[i]==s[j]){
l[i]=j++;
break;
}
j++;
}
}
j=n;
for(int i=m;i;i--){
while(j>=1){
if(t[i]==s[j]){
r[i]=j--;
break;
}
j--;
}
}
int ans=0;
for(int i=1;i<m;i++) ans=max(ans,r[i+1]-l[i]);
pd(ans);
}
}
return 0;
}