給你一個二進制字符串 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
C++
class Solution {
public:
bool hasAllCodes(string s, int k)
{
if(s.size()<k)
{
return false;
}
unordered_set<string> tmp;
int n=s.size();
for(int i=0;i<=n-k;i++)
{
tmp.insert(s.substr(i,k));
}
return tmp.size()==pow(2,k);
}
};