哈希表

点击查看代码
using namespace std;
typedef long long LL;
typedef pair<string,int> PLL;
#define IOS cin.tie(nullptr)->sync_with_stdio(false);
#define se second
#define fi first
#define mem(a,b) memset(a,b,sizeof a);
#define pri priority_queue<int,vector<int>,greater<int> >
#define low(a,b,c) lower_bound(a,a+b,c)-a;
#define upp(a,b,c) upper_bound(a,a+b,c)-a;
const int N=1e5+7,P=131;//相当于P进制 
LL h[N],p[N];//p表示单位 ,h哈希值  
char a[N];
LL get(int l,int r)
{
	return h[r]-h[l-1]*p[r-l+1];
}
int n;
bool check(int x)
{
	set<LL> se;
	for(int i=x;i<=n;i++)
	{
		se.insert(get(i-x+1,i));
	}
	if(se.size()==n-x+1)
	{
		return true; 
	}
	
	return false;
}
void solve()
{
	cin>>n;
	cin>>(a+1);
	p[0]=1;
	for(int i=1;i<=n;i++)
	{
		h[i]=h[i-1]*P+a[i];
		p[i]=p[i-1]*P;
	}
	int l=1,r=n;
 	while(l<r)
	{
		int mid=(l+r)>>1;
		
		if(check(mid)) r=mid;
		else l=mid+1;
	}
	cout<<r<<endl;
	return ;
}
int main()
{
	IOS;
	int t=1;
	//cin>>t;
	while(t--)
	{
		solve();
	}
	return 0;
}


posted @ 2023-03-30 21:56  xxj112  阅读(29)  评论(0)    收藏  举报