题目链接:https://leetcode-cn.com/problems/check-if-a-string-contains-all-binary-codes-of-size-k/
难顶,一看见子串这种东西就晕乎
看了题解,滑动窗口枚举所有出现的子串,最后判断总个数是否与预期相同即可。
代码如下:
class Solution {
public:
bool hasAllCodes(string s, int k) {
int cur = 0;
for(int i = 0; i < k - 1; i ++)
cur = 2 * cur + (s[i] == '1');
unordered_set<int> set;
for(int i = k - 1; i < s.size(); i ++){
cur = cur * 2 + (s[i] == '1');
set.insert(cur);
cur &= ~(1 << (k - 1));
}
return set.size() == (1 << k);
}
};