题解 CF1492C【Maximum width】

概述

题号 难度 \(AC\)时间及记录
\(\texttt{CF1492C}\) \(\texttt{洛谷难度:暂无评定}\) \(\texttt{On 2021/02/24}\)

解析

这是一道简单题。
题意也比较清晰。
不难想到,
众所周知,
我们可以对第二个字符串中的每一个字符从前往后扫,
再从后往前扫。
求出它们最大出现位置 \(Mx\) 数组,
以及他们最小出现位置 \(Mi\) 数组,
答案就很容易得到了。

代码

#include<bits/stdc++.h>
#define BetterIO ios::sync_with_stdio(false)
using namespace std;
int N,M;
string S,T;
int Array[200001];
int Brray[200001];
int main(void)
{
	BetterIO;
	register int i,j;
	cin>>N>>M;
	cin>>S>>T;
	register int X,Y;
	X=Y=0;
	while(Y<T.size())
	{
		if(S[X]==T[Y])
		{
			Array[Y]=X;
			Y++;
		}
		X++;
	}
	X=N-1;
	Y=M-1;
	while(Y>=0)
	{
		if(S[X]==T[Y])
		{
			Brray[Y]=X;
			Y--;
		}
		X--;
	}
	register int Mx;
	Mx=0;
	for(i=0;i<M;i++)
	{
		Mx=max(Mx,Brray[i+1]-Array[i]);
	}
	cout<<Mx<<endl;
	return 0;
}
posted @ 2021-02-24 10:25  Bushuai_Tang  阅读(58)  评论(0编辑  收藏  举报