力扣OJ 1461. 檢查一個字符串是否包含所有長度爲 K 的二進制子串

給你一個二進制字符串 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;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章