Codeforces 1203D2 Remove the Substring (hard version)
Posted qingjiuling
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 1203D2 Remove the Substring (hard version)相关的知识,希望对你有一定的参考价值。
题目链接:https://www.luogu.org/problem/CF1203D2
题意:给你两个字符串s,t(长度为2e5),保证t是s的子序列,求问最大能在s中删子串的长度,且保证删后t还是s的子序列
分析:先求pre和last两个数组,分别保存最左边的满足t的子序列后最右边的满足t的子序列。
之后依次比较即可
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int inf=0x3f3f3f3f; const int maxn=2e5+7; const int mod=1e9+7; #define mem0(a) memset(a,0,sizeof(a)) #define meminf(a) memset(a,0x3f,sizeof(a)) #define ls rt<<1 #define rs rt<<1|1 #define mid (l+r)>>1 char s[maxn],t[maxn]; int pre[maxn],last[maxn]; int main() scanf("%s%s",s+1,t+1); int id=1; int slen=strlen(s+1),tlen=strlen(t+1); for(int i=1;i<=slen;i++) if(s[i]==t[id]) pre[id]=i; id++; if(id>tlen)break; id=tlen; for(int i=slen;i>=1;i--) if(s[i]==t[id])last[id]=i,id--; if(id<1)break; int ans=max(last[1]-1,slen-pre[tlen]); for(int i=1;i<=tlen;i++) ans=max(ans,last[i+1]-pre[i]-1); printf("%d\n",ans); return 0;
以上是关于Codeforces 1203D2 Remove the Substring (hard version)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #450 (Div. 2) C. Remove Extra One 题解
Codeforces 821C Okabe and Boxes