求助,为什么这个思路是错的
查看原帖
求助,为什么这个思路是错的
469213
SugarKite楼主2024/3/29 20:21

求hack

#define N 1000010
char s[N],t[N];
int lst[30];//记录字母上一个出现的位置 
int n,ans=0;
signed main(){
	cin>>n;
	for(int i=0;i<=26;i++)lst[i]=0x3f3f3f3f; 
	for(int i=1;i<=n;i++)cin>>s[i];
	for(int i=1;i<=n;i++)cin>>t[i];
	int cnt=0,len=0;//偏移量相同的子串长cnt与偏移量len 
	for(int i=1;i<=n;i++){
		lst[s[i]-'a']=i;
		if(i-lst[t[i]-'a']<0){//找不到上一个出现的位置 
			cout<<"-1"<<endl;
			return 0;
		}
		if(i-lst[t[i]-'a']!=len){
			if(i-lst[t[i]-'a']-len>1){//跨过保留串 
				cout<<"-1"<<endl;
				return 0;
			}
			ans=max(ans,cnt-1+len);
			len=i-lst[t[i]-'a'];
			cnt=0;	
		}
		if(len)cnt++;//不需转移的不计数 
	}
	ans=max(ans,cnt-1+len);
	cout<<ans<<endl;
	return 0;
} 
2024/3/29 20:21
加载中...