LeetCode 1461. Check If a String Contains All Binary Codes of Size K Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
1461. Check If a String Contains All Binary Codes of Size K

Description

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

 

Example 1:

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

Example 2:

Input: s = "0110", k = 1
Output: true
Explanation: The binary codes of length 1 are "0" and "1", it is clear that both exist as a substring. 

Example 3:

Input: s = "0110", k = 2
Output: false
Explanation: The binary code "00" is of length 2 and does not exist in the array.

 

Constraints:

  • 1 <= s.length <= 5 * 105
  • s[i] is either '0' or '1'.
  • 1 <= k <= 20

Solutions

Solution 1: Hash Table

First, for a string s of length n, the number of substrings of length k is n - k + 1. If n - k + 1 < 2k, then there must exist a binary string of length k that is not a substring of s, so we return false.

Next, we traverse the string s and store all substrings of length k in a set ss. Finally, we check if the size of the set ss is equal to 2k.

The time complexity is O(n × k), and the space complexity is O(n). Here, n is the length of the string s.

PythonJavaC++GoTypeScript
class Solution: def hasAllCodes(self, s: str, k: int) -> bool: n = len(s) m = 1 << k if n - k + 1 < m: return False ss = {s[i : i + k] for i in range(n - k + 1)} return len(ss) == m(code-box)

Solution 2: Sliding Window

In Solution 1, we stored all distinct substrings of length k, and processing each substring requires O(k) time. We can instead use a sliding window, where each time we add the latest character, we remove the leftmost character from the window. During this process, we use an integer x to store the substring.

The time complexity is O(n), and the space complexity is O(n). Here, n is the length of the string s.

PythonJavaC++GoTypeScript
class Solution: def hasAllCodes(self, s: str, k: int) -> bool: n = len(s) m = 1 << k if n - k + 1 < m: return False ss = set() x = int(s[:k], 2) ss.add(x) for i in range(k, n): a = int(s[i - k]) << (k - 1) b = int(s[i]) x = (x - a) << 1 | b ss.add(x) return len(ss) == m(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !