#1是红的......
  • 板块B2118 验证子串
  • 楼主Ace2012
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/10 19:46
  • 上次更新2023/12/10 21:00:42
查看原帖
#1是红的......
936204
Ace2012楼主2023/12/10 19:46
#include<iostream>
#include<string>
using namespace std;
int nexta[100];
void get_next(string t){
	int i=1,j=0;
	nexta[1]=0;
	while(i<t.length()){
		if(j==0||t[i-1]==t[j-1]){
			nexta[++i]=++j;
		}
		else{
			j=nexta[j];
		}
	}
}
int k(string s,string t,int pos){
	int i=pos,j=0;
	int n=s.length(),m=t.length();
	while(i<=n&&j<=m){
		if(j==0||s[i-1]==t[j-1]){
			i++;
			j++;
		}else{
			j=nexta[j];
		}
		
	}
	if(j>m) return i-m;
	return -128; 
}
int main(){
	string src,tar; 
	getline(cin,src);
	getline(cin,tar); 
	if(src.length()<tar.length()){
		swap(src,tar); 
	}
	get_next(tar);
	if(k(src,tar,0)!=-128){
		cout<<tar<<" is substring of "<<src<<endl; 
	}else{
		cout<<"No substring"<<endl;
	}
	
	return 0;
}




2345过了,1却没过

SOS!!!

2023/12/10 19:46
加载中...