二进制
lc1496
滑窗把字符串里所有长度为k的子串转成二进制数,检查是否覆盖了0~2ᵏ⁻¹全部数字,全覆盖就返回true
class Solution {
public:
bool hasAllCodes(string s, int k) {
if(k > s.size()) return 0;
int cur = 0;
for(int i = 0; i < k - 1; i ++)
cur = 2 * cur + (s[i] == '1');
vector<bool> used(1 << k, false);
for(int i = k - 1; i < s.size(); i ++){
cur = cur * 2 + (s[i] == '1');
used[cur] = true;
cur &= ~(1 << (k - 1));
}
for(int e: used) if(!e) return false;
return true;
}
};
