C. Maximum width
题目
参考链接:借鉴题解链接
【代码】
#include<iostream>
using namespace std;
int main(){
int n,m;
string s,t;
scanf("%d%d",&n,&m);
cin>>s>>t;
int qian[m];
int hou[m];
int index=-1;
for(int i=0;i<m;i++){
while(s[++index]!=t[i]);
//因为一定存在t为s完美子串
//所以可以不用加对于index的限制
//注意:如果为 while( s[index++] != t[i] ) ;
//跳出后 index - 2 才是要找第一个等于t[i]的位置
qian[i] = index;
}//找最前
index=n;
for(int i=m-1;i>=0;i--){
while(s[--index]!=t[i]);
hou[i] = index;
} //找最后位置
int max=-1;
for(int i=0;i<m-1;i++){
int dis=hou[i+1]-qian[i];
if(dis > max) max=dis;
}
cout<<max<<endl;
return 0;
}