二分答案 (遍历 map 做 check 函数)
#include <bits/stdc++.h>
using namespace std;
bool check(int mid, string s)
{
map <string, int> ma;
for (int i = 0; i < s.size() - mid + 1; i ++ ){
ma[s.substr(i, mid)] ++ ;
}
if (ma.size() == (int)pow(2, mid))
return false;
else
return true;
}
signed main(void)
{
string s; cin >> s;
int l = 1, r = 1;
while ((int)pow(2, r) <= s.size())
r ++ ;
// cout << r << endl;
while (l < r){
int mid = l + r >> 1;
if (check(mid, s)) r = mid;
else l = mid + 1;
}
cout << l << endl;
return 0;
}