leetcode 1461. 檢查一個字符串是否包含所有長度爲 K 的二進制子串(C++)

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

 

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