📅  最后修改于: 2023-12-03 14:44:50.542000             🧑  作者: Mango
在计算机科学中,“按位与”是一种逻辑操作,它对两个二进制数字的每个位执行逻辑AND操作,并生成一个新的二进制数字。本题中,要求对 N 个二进制字符串进行按位与操作,得到一个新的二进制字符串。
我们可以逐位比较每个字符串的相应位是否都为1,如果是,则将新的字符串的相应位设置为1,否则设置为0。为了减少时间复杂度,我们可以先找到具有最短长度的字符串,只遍历它的每一位,与其他字符串做比较。
def bitwise_and(strs: List[str]) -> str:
min_len = min([len(s) for s in strs])
res = ""
for i in range(min_len):
if all([s[i] == "1" for s in strs]):
res += "1"
else:
res += "0"
return res
>>> bitwise_and(["10101", "11011", "11110", "00101"])
'00101'
本题的思路比较简单,关键是注意到最短字符串的应用。虽然时间复杂度比暴力解法的 $O(N^2 L)$ 更好,但实际上本题的数据规模并不足以导致暴力解法超时。