#include<bits/stdc++.h>
using namespace std;
char s[200007],t[200007];
int last[200007][27],nxt[200007][27];
int l[200007],r[200007];
int main(){
cin>>s+1>>t+1;
int n=strlen(s+1);
int m=strlen(t+1);
for(int i=1;i<=n;++i){
for(int j=0;j<26;++j)
last[i][j]=last[i-1][j];//i表示当前位置,j表示字母大小,复制当前位置以前最晚出现字母j的位置就是前一格位置以前最晚出现j字母的位置
last[i][s[i]-'a']=i;//更新当前位置以前最晚出现字母s[i]的位置
}
for(int i=n;i;--i){
for(int j=0;j<26;++j)
nxt[i][j]=nxt[i+1][j];//复制当前位置以后最早出现字母j的位置就是前一格位置以前最早出现字母j的位置
nxt[i][s[i]-'a']=i;//更新当前位置以后最早出现字母s[i]的位置
}
int now=1;
l[0]=1;
for(int i=1;i<=m;++i){
now=nxt[now][t[i]-'a']+1;//now表示now位置以后最早出现字母t[i]的位置,保证该位置以后还能有剩余的t字符串i+1~m
l[i]=now;//更新i位置左端点的值为now
}
now=n;
r[m+1]=n;
for(int i=m;i;--i){
now=last[now][t[i]-'a']-1;//now表示now位置以前最晚出现字母t[i]的位置,保证该位置以前还能有剩余的t字符串1~i-1
r[i]=now;//更新i位置右端点的值为now
}
int ans=0;
for(int i=0;i<=m;++i)
ans=max(r[i+1]-l[i]+1,ans);//更新答案为字母t[i+1]最晚出现的位置减去字母t[i]最早出现的位置+1
cout<<ans;
return 0;
}

最新文章

  1. 安装切换openjdk
  2. 通过正则表达式实现简单xml文件解析
  3. Gold Game
  4. C#与C++(结构体内对象指定大小)
  5. [流媒体]live555简介(转)
  6. 浅谈如何使用代码为MP3文件写入ID3Tags
  7. POJ 1013 Counterfeit Dollar 集合上的位运算
  8. Park Visit
  9. sort,uniq命令
  10. Linux学习-Linux历史(总结篇)
  11. HTTP各状态消息说明
  12. Objectiv-c - UICollectionViewLayout自定义布局-瀑布流
  13. CSS3新增伪类汇总
  14. μC/OS-II与RT-Thread对比——任务调度
  15. Linux系统诊断必备技能之二:tcpdump抓包工具详解
  16. main.js中封装全局登录函数
  17. java之JUC
  18. 利用crash 分析软死锁问题【转】
  19. cf796d 树,bfs好题!
  20. Android——Android和SVN::::SVN+delete项目

热门文章

  1. BUUCTF-Web-Warm Up(CVE-2018-12613)
  2. 7,请描述下cookies,sessionStorage和localStorage的区别
  3. 【C语言】极坐标转换为直角坐标
  4. C语言:将形参s所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,
  5. Windows 搭建WAMP+Mantis
  6. 缓存验证Last-Modified和Etag的使用
  7. LeetCode练题——35. Search Insert Position
  8. java编码格式大讲解
  9. Springboot学习:底层依赖与自动配置的原理
  10. for in 与for 与hasOwnProperty