<p>Given a binary string <code>s</code> and an integer <code>k</code>, return <code>true</code> <em>if every binary code of length</em> <code>k</code> <em>is a substring of</em> <code>s</code>. Otherwise, return <code>false</code>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;00110110&quot;, k = 2
<strong>Output:</strong> true
<strong>Explanation:</strong> The binary codes of length 2 are &quot;00&quot;, &quot;01&quot;, &quot;10&quot; and &quot;11&quot;. They can be all found as substrings at indices 0, 1, 3 and 2 respectively.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;0110&quot;, k = 1
<strong>Output:</strong> true
<strong>Explanation:</strong> The binary codes of length 1 are &quot;0&quot; and &quot;1&quot;, it is clear that both exist as a substring. 
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;0110&quot;, k = 2
<strong>Output:</strong> false
<strong>Explanation:</strong> The binary code &quot;00&quot; is of length 2 and does not exist in the array.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= s.length &lt;= 5 * 10<sup>5</sup></code></li>
	<li><code>s[i]</code> is either <code>&#39;0&#39;</code> or <code>&#39;1&#39;</code>.</li>
	<li><code>1 &lt;= k &lt;= 20</code></li>
</ul>

// class Solution {
// public:
//     bool hasAllCodes(string s, int k) {
// //          if(s.length()<k){
//              return false;
//          }
//           int n=pow(2,k);

//          unordered_map<string,bool>mp;
            
//           for(int i=0;i<n;i++){
//               int t=i;
//               string p="";
          
//               int l=k;
//               while(l>0){
//                     int m=t&1;
//                     t=t>>1;
//                     char a=m+'0';
//                     p=p+a;
//                     l--;
//               }
//               mp[p]=true;
//               cout<<p<<" ";
//           }

//           for(int i=0;i<s.size()-k+1;i++){
//                string o=s.substr(i,k);
//                if(mp.find(o)!=mp.end()){
//                    mp[o]=false;
//                }
//           }
         
//           for(auto it=mp.begin();it!=mp.end();it++){
//              if(it->second==true){
//                  return false;
//              }
//           }
//           return true;

//     }
class Solution {
public:
    bool hasAllCodes(string s, int k) {
        if (k > s.size()) return false;
        
        unordered_set<string> my_set;
        
        for (int i = 0; i <= s.size()-k; i++)
            my_set.insert(s.substr(i, k));
        
        return my_set.size() == pow(2, k);
    }
};

116953