給你一個二進制字符串 s 和一個整數 k 。
如果所有長度爲 k 的二進制字符串都是 s 的子串,請返回 True ,否則請返回 False 。
示例 1:
輸入:s = "00110110", k = 2
輸出:true
解釋:長度爲 2 的二進制串包括 "00","01","10" 和 "11"。它們分別是 s 中下標爲 0,1,3,2 開始的長度爲 2 的子串。
示例 2:
輸入:s = "00110", k = 2
輸出:true
示例 3:
輸入:s = "0110", k = 1
輸出:true
解釋:長度爲 1 的二進制串包括 "0" 和 "1",顯然它們都是 s 的子串。
示例 4:
輸入:s = "0110", k = 2
輸出:false
解釋:長度爲 2 的二進制串 "00" 沒有出現在 s 中。
示例 5:
輸入:s = "0000000001011100", k = 4
輸出:false
提示:
1 <= s.length <= 5 * 10^5
s 中只含 0 和 1 。
1 <= k <= 20
class Solution {
public:
bool hasAllCodes(string s, int k) {
unordered_set<string>se;
for(int i=0;i+k<=s.length();i++)
{
se.insert(s.substr(i,k));
if(se.size()+s.length()-i-k<(1<<k))return false;
if(se.size()==(1<<k))return true;
}
return false;
}
};