求hack思路
查看原帖
求hack思路
250699
mot1ve楼主2021/2/25 13:39

我的思路就是s数组和t数组都用双指针,s序列的双指针是一直推进的,如果此时和t数组指针指向的字母一样,就标记这个位置,然后t数组指针推进一个单位。一直这样找下去,自己造了几组数据觉得没什么问题。

//尽可能扩大相邻两项的极差,s序列双指针同时推进
//t序列指针遇到才推进 
#include<bits/stdc++.h>
using namespace std;
int n,m;
string s,t;
bool vis[1000010];
int main()
{
	cin>>n>>m;
	cin>>s>>t;
	int p1=-1,p2=n;//s序列 
	int q1=0,q2=m-1;//t序列 
	while(1)
	{
		p1++;
		if(s[p1]==t[q1])
		{
			vis[p1]=1;
			q1++;
		}
		if(q1>q2)
		break;
		p2--;
		if(s[p2]==t[q2])
		{
			vis[p2]=1;
			q2--;
		}
		if(q1>q2)
		break;
	}
	int flag,ed;
	for(int i=0;i<n;i++)
	{
		if(vis[i])
		{
			flag=i;
			break;
		}
	}
	for(int i=n-1;i>0;i--)
	{
		if(vis[i])
		{
			ed=i;
			break;
		}
	}
	int ans=1,cnt=1;
	for(int i=flag+1;i<=ed;i++)
	{
		if(vis[i])
		{
			cnt=1;
			continue;
		}
		else
		{
			cnt++;
			ans=max(ans,cnt);
		}
	}
	cout<<ans;
	return 0;
} 
2021/2/25 13:39
加载中...