

点击查看代码
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;
}