注:题目来自牛客网
https://ac.nowcoder.com/acm/problem/14270
思路:
这道题其实就是求组成01字符串,最短的并且不是给出的01字符串的子串的长度。
比如说:10010,如果使11就没有重复的 但是00,01,10就是重复.
1.可以用set容器存储子串
2如果长度为i的子串个数小于2的i次方,说明可行。
为什么呢?!!!
举例来说:比如i=3,2的i次方为8,就是位数为3的八种字符串,000,001,011,010,100,101,110,111.如果个数小于8,说明有没有出现过的01串。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
set<string> flag1;
for(int i = 1;;i ++)
{
flag1.clear();
for(int j = 0; j + i < s.length(); j ++)
{
flag1.insert(s.substr(j,i));
}
if(flag1.size() < (1 << i))
{
cout << i << endl;
break;
}
}
}
1<<i位运算,1左移i为,其实就是计算2的i次方