Solving Leetcode Interviews in Seconds with AI: Check If a String Contains All Binary Codes of Size K
Introduction
In this blog post, we will explore how to solve the LeetCode problem "1461" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.
Problem Statement
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
Explanation
Here's a breakdown of the solution:
- Key Idea: Iterate through the string
sand extract all possible substrings of lengthk. Convert these substrings into their integer representation. Use a set to efficiently keep track of the unique integer representations encountered. - Completeness Check: After iterating through
s, check if the number of unique integer representations in the set is equal to 2k. If they are equal, then all binary codes of lengthkare present as substrings. Efficiency: Using a set provides efficient lookups and ensures no duplicate substrings are counted. Integer conversion allows quick comparisons.
Complexity: O(n) runtime, O(2k) storage where n is the length of s.
Code
def hasAllCodes(s: str, k: int) -> bool:
"""
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.
"""
seen = set()
for i in range(len(s) - k + 1):
sub = s[i:i+k]
seen.add(int(sub, 2))
return len(seen) == 2**k