鄙人不才,此中鄙陋甚多,望海涵!!!
正反遍历,找相邻最大距离即可
C++Code
#include<iostream>
using namespace std;
const int N=2e5+10;
int pos1[N],pos2[N];
char s[N],t[N];
int n,m;
int main()
{
cin>>n>>m;
scanf("%s%s",s+1,t+1);
int cnt=1;
for(int i=1;i<=n;i++)
{
if(s[i]==t[cnt]) pos1[cnt++]=i;
if(cnt>m) break;
}
cnt=m;
for(int i=n;i>=1;i--)
{
if(s[i]==t[cnt]) pos2[cnt--]=i;
if(cnt<1) break;
}
int ans=0;
for(int i=2;i<=m;i++) ans=max(ans,pos2[i]-pos1[i-1]);
cout<< ans <<endl;
return 0;
}