#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;
}

Codeforces Round #579 (Div. 3)D(字符串,思维)的更多相关文章

  1. Codeforces Round #541 (Div. 2) E 字符串 + 思维 + 猜性质

    https://codeforces.com/contest/1131/problem/D 题意 给你n个字符串,字符串长度总和加起来不会超过1e5,定义字符串相乘为\(s*s1=s1+s[0]+s1 ...

  2. Codeforces Round #579 (Div. 3)

    Codeforces Round #579 (Div. 3) 传送门 A. Circle of Students 这题我是直接把正序.逆序的两种放在数组里面直接判断. Code #include &l ...

  3. Codeforces Round #546 (Div. 2) D 贪心 + 思维

    https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...

  4. Codeforces Round #410 (Div. 2)(A,字符串,水坑,B,暴力枚举,C,思维题,D,区间贪心)

    A. Mike and palindrome time limit per test:2 seconds memory limit per test:256 megabytes input:stand ...

  5. Codeforces Round #336 (Div. 2)【A.思维,暴力,B.字符串,暴搜,前缀和,C.暴力,D,区间dp,E,字符串,数学】

    A. Saitama Destroys Hotel time limit per test:1 second memory limit per test:256 megabytes input:sta ...

  6. Codeforces Round #579 (Div. 3) D2. Remove the Substring (hard version) (思维,贪心)

    题意:给你一个模式串\(t\),现在要在主串\(s\)中删除多个子串,使得得到的\(s\)的子序列依然包含\(t\),问能删除的最长子串长度. 题解:首先,我们不难想到,我们可以选择\(s\)头部到最 ...

  7. 【cf比赛练习记录】Codeforces Round #579 (Div. 3)

    思考之后再看题解,是与别人灵魂之间的沟通与碰撞 A. Circle of Students 题意 给出n个数,问它们向左或者向右是否都能成一个环.比如样例5是从1开始向左绕了一圈 [3, 2, 1, ...

  8. Codeforces Round #541 (Div. 2) G dp + 思维 + 单调栈 or 链表 (连锁反应)

    https://codeforces.com/contest/1131/problem/G 题意 给你一排m个的骨牌(m<=1e7),每块之间相距1,每块高h[i],推倒代价c[i],假如\(a ...

  9. Codeforces Round #329 (Div. 2)A 字符串处理

    A. 2Char time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...

随机推荐

  1. C语言创建共享库(动态库)步骤

    C语言创建共享库(动态库)步骤: 创建sth.c,共享库源文件: //sth.c库源程序 unsigned long long sth(unsigned int x, unsigned int y) ...

  2. stm32控制步进电机加减速

    实习公司项目需要控制步进电机,电机方面主要包括控制运动.加减速.限位.下面介绍一下在电机控制方面的心得,由于对于电机的控制不需要很精确,并且自身能力有限,相比于大牛有很大的差距. 1.需要实现的功能 ...

  3. 如何修改mysql 默认引擎为InnoDB?

    1.查看 MySQL支持的引擎有哪些? show engines: 结果: 由上图可以看出,只有 InnoDB 是支持事务的 2.查看默认引擎 show variables like “default ...

  4. Linux控制服务和守护进程

    目录 控制服务和守护进程 1.systemd 1.1.systemd简介 1.2.systemd的新特性 1.3.systemd的核心概念Unit 2.使用systemctl管理服务 控制服务和守护进 ...

  5. 【代码学习】PYTHON 生成器

    一.生成器 一遍循环一遍计算的机制,称为生成器 二.生成器的特点: 1.节约内存 2.迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时保留的, ...

  6. YouTube为创作者提供了更多赚钱的途径

    编辑 | 于斌 出品 | 于见(mpyujian) 大家提到YouTube可能还有些陌生,只是听说过,但因为一些原因并没有实际应用过,但其实YouTube就是设立在美国的一个视频分享网站,让使用者上载 ...

  7. 传奇身上装备升级系列脚本,以及UPGRADEITEMEX 脚本的详细参数解释

    UPGRADEITEMEX 脚本的详细参数解释如下: UPGRADEITEMEX 物品位置(0-12) 属性位置(0-14) 成功机率(0-100) 点数机率(0-255) 是否破碎(0,1) 物品位 ...

  8. VS中消除ANSI API警告

    最近在VS上写网络程序遇到许多问题,因为VS中将许多ANSI中的API都重写了,那些API大多有漏洞或不能支持现在的一些编程需求了,所以在VS中使用会因为警告而不能用. 但一些老API用着比较方便,了 ...

  9. JS中的数组创建,初始化

    JS中没有专门的数组类型.但是可以在程序中利用预定义的Array对象及其方法来使用数组. 在JS中有三种创建数组的方法: var arr = new Array(1,2,3,4); var arr = ...

  10. .NET中的字符串(1):字符串 - 特殊的引用类型

    C# string 特殊的引用类型 .Net 框架程序设计(修订版)中有这样一段描述:String类型直接继承自Object,这使得它成为一个引用类型,也就是说线程上的堆栈上不会驻留有任何字符串.(译 ...