Problem Link

Description


Given an array of strings nums containing n unique binary strings each of length n, return a binary string of length n that does not appear in nums. If there are multiple answers, you may return any of them.

 

Example 1:

Input: nums = ["01","10"]
Output: "11"
Explanation: "11" does not appear in nums. "00" would also be correct.

Example 2:

Input: nums = ["00","01"]
Output: "11"
Explanation: "11" does not appear in nums. "10" would also be correct.

Example 3:

Input: nums = ["111","011","001"]
Output: "101"
Explanation: "101" does not appear in nums. "000", "010", "100", and "110" would also be correct.

 

Constraints:

  • n == nums.length
  • 1 <= n <= 16
  • nums[i].length == n
  • nums[i] is either '0' or '1'.
  • All the strings of nums are unique.

Solution


Python3

class Solution:
    def findDifferentBinaryString(self, nums: List[str]) -> str:
        N = len(nums)
        res = []
        root = [None, None, 0]
        COUNT = 2
 
        def add(x):
            curr = root
 
            for k in range(N):
                bit = int(x[k])
                
                if curr[bit] is None:
                    curr[bit] = [None, None, 0]
                
                curr = curr[bit]
                curr[COUNT] += 1
 
        for x in nums:
            add(x)
 
        curr = root
        for k in range(N):
            left, right = curr[0][COUNT] if curr[0] is not None else 0, curr[1][COUNT] if curr[1] is not None else 0
            bit = 0 if left < right else 1
            res.append(str(bit))
            if curr[bit] is None:
                curr[bit] = [None, None, 0]
            
            curr = curr[bit]
        
        return "".join(res)