题目链接:http://codeforces.com/contest/1203/problem/D2
思路:找出s串中从头开始第一个与t串匹配的子串,找出s串中最后一个与t串匹配的子串。
答案要么删去s串中最后一个满足条件的t串的第一个字符前的序列,或者s串中第一个满足条件的t串的最后一个字符后的序列,或者s中满足条件的t串的两个字符中的序列。
#include<bits/stdc++.h>
using namespace std;
char s1[200010],s2[200010];
int l[200010],r[200010];
int main()
{
scanf("%s%s",s1,s2);
int len1=strlen(s1),len2=strlen(s2);
for(int i=0,j=0; j<len2; i++)
if(s1[i]==s2[j]) l[j++]=i;
for(int i=len1-1,j=len2-1;j>=0;i--)
if(s1[i]==s2[j]) r[j--]=i;
int ans=0;
ans=max(ans,max(l[0],len1-l[len2-1]-1));
ans=max(ans,max(r[0],len1-r[len2-1]-1));
for(int i=1;i<len2;i++)
{
ans=max(ans,r[i]-l[i-1]-1);
}
printf("%d\n",ans);
}