正确代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10,mod=1e9+7;
char s[N],ss[N];
int n,t,a[N],f[N],res=-1,num,ans,m,k,len;
bool vis[N];
int h[N],e[N],x,x_;
void solve()
{
cin>>n>>m>>s>>ss;
int j=0;
for(int i=0;i<n;i++)
if(s[i]==ss[j]) h[j++]=i;
j=m-1;
for(int i=n-1;i>=0;i--)
if(s[i]==ss[j]) e[j--]=i;
for(int i=1;i<m;i++) res=max(res,e[i]-h[i-1]);
cout<<res;
}
signed main()
{
solve();
return 0;
}
错误代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10,mod=1e9+7;
char s[N],ss[N];
int n,t,a[N],f[N],res=-1,num,ans,m,k,len;
bool vis[N];
int h[N],e[N],x,x_;
void solve()
{
cin>>n>>m>>s>>ss;
int j=0;
for(int i=0;i<m;i++){
while(j<n&&s[j]!=ss[i]) j++;
h[i]=j;
}
j=n-1;
for(int i=m-1;i>=0;i--){
while(j>0&&s[j]!=ss[i]) j--;
e[i]=j;
}
for(int i=1;i<m;i++) res=max(res,e[i]-h[i-1]);
cout<<res;
}
signed main()
{
solve();
return 0;
}