1980. Find Unique Binary String
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.length1 <= n <= 16nums[i].length == nnums[i]is either'0'or'1'.- All the strings of
numsare unique.
Solutions
Solution 1: Counting + Enumeration
Thinking
There are \(n\) strings of length \(n\) but \(2^n\) possible ones. Among \(n+1\) possible Hamming weights only \(n\) appear, so one weight is missing.
A bit mask records seen counts of ones; we return that many ones padded with zeros.
Since the number of '1's in a binary string of length \(n\) can be \(0, 1, 2, \cdots, n\) (a total of \(n + 1\) possibilities), we can always find a new binary string whose count of '1's differs from every string in \(\textit{nums}\).
We use an integer \(\textit{mask}\) to record the counts of '1's across all strings, where the \(i\)-th bit of \(\textit{mask}\) being \(1\) indicates that a binary string of length \(n\) with exactly \(i\) occurrences of '1' exists in \(\textit{nums}\), and \(0\) otherwise.
We then enumerate \(i\) starting from \(0\), representing the count of '1's in a binary string of length \(n\). If the \(i\)-th bit of \(\textit{mask}\) is \(0\), it means no binary string of length \(n\) with exactly \(i\) occurrences of '1' exists, and we can return that string as the answer.
The time complexity is \(O(L)\), where \(L\) is the total length of all strings in \(\textit{nums}\). The space complexity is \(O(1)\).
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Solution 2: Construction
Thinking
Counting bits walks every character. Cantor diagonalization flips \(\textit{nums}[i][i]\) so the result differs from each input in at least one position.
We can construct a binary string \(\textit{ans}\) of length \(n\), where the \(i\)-th bit of \(\textit{ans}\) differs from the \(i\)-th bit of \(\textit{nums}[i]\). Since all strings in \(\textit{nums}\) are distinct, \(\textit{ans}\) will not appear in \(\textit{nums}\).
The time complexity is \(O(n)\), where \(n\) is the length of the strings in \(\textit{nums}\). Ignoring the space used by the answer string, the space complexity is \(O(1)\).
1 2 3 4 5 6 | |
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 10 | |