我的思路就是s数组和t数组都用双指针,s序列的双指针是一直推进的,如果此时和t数组指针指向的字母一样,就标记这个位置,然后t数组指针推进一个单位。一直这样找下去,自己造了几组数据觉得没什么问题。
//尽可能扩大相邻两项的极差,s序列双指针同时推进
//t序列指针遇到才推进
#include<bits/stdc++.h>
using namespace std;
int n,m;
string s,t;
bool vis[1000010];
int main()
{
cin>>n>>m;
cin>>s>>t;
int p1=-1,p2=n;//s序列
int q1=0,q2=m-1;//t序列
while(1)
{
p1++;
if(s[p1]==t[q1])
{
vis[p1]=1;
q1++;
}
if(q1>q2)
break;
p2--;
if(s[p2]==t[q2])
{
vis[p2]=1;
q2--;
}
if(q1>q2)
break;
}
int flag,ed;
for(int i=0;i<n;i++)
{
if(vis[i])
{
flag=i;
break;
}
}
for(int i=n-1;i>0;i--)
{
if(vis[i])
{
ed=i;
break;
}
}
int ans=1,cnt=1;
for(int i=flag+1;i<=ed;i++)
{
if(vis[i])
{
cnt=1;
continue;
}
else
{
cnt++;
ans=max(ans,cnt);
}
}
cout<<ans;
return 0;
}