🔗 https://leetcode.com/problems/check-if-a-string-contains-all-binary-codes-of-size-k
题目
- 给一个字符串 s,由 0 和 1 构成
- 判断由长度 k 组成的所有二进制编码的字符串,是否都是 s 的 substring
思路
- rolling hash
- 滑动窗口长度 k,判断字符串是否可以组成所有 [0, 2^k)
代码
cpp
class Solution {
public:
bool hasAllCodes(string s, int k) {
if (s.size() < k) return false;
set<long long> st;
long long num = 0;
for (int i = 0; i < k; i++) {
num = num * 2 + s[i] - '0';
}
st.insert(num);
for (int i = k; i < s.size(); i++) {
if (s[i-k] == '1') num = num - pow(2, k-1);
num = num * 2 + s[i] - '0';
st.insert(num);
}
return st.size() == (pow(2, k));
}
};