从Leetcode 每日一题练习继续讨论:
1980. 找出不同的二进制字符串
1980. Find Unique Binary String
题解
本题考虑字符串仅包含0和1,且字符串长度最大为16,因此可以直接将字符串中的0和1当作二进制位来处理,每个字符串都对应一个二进制串从而可以计算出该串对应的整数,将这些整数保存起来,再从该长度对应的二进制数的整数范围内找到一个不包含在这些整数中的整数转化为字符串形式的二进制串即可得到结果,一种简单的方法是直接从0开始递增遍历,只要碰到的数字不包含在之前的二进制串对应的整数中即为有效数字,因为之前的二进制串对应的整数最多16个,因此最差遍历16次一定可以得到结果。
代码
class Solution {
public:
string findDifferentBinaryString(vector<string>& nums) {
int n = nums.size();
unordered_set<int> s;
for (string& num : nums) {
int val = 0;
for (char c : num) {
val = (val << 1) | (c - '0');
}
s.insert(val);
}
for (int i = 0; ; ++i) {
if (s.find(i) == s.end()) {
string res = "";
int temp = i;
for (int j = 0; j < n; ++j) {
res = (char)((temp & 1) + '0') + res;
temp >>= 1;
}
return res;
}
}
}
};