尝试在python中列出here列出的问题的解决方案,我想我会尝试一个不错的小正则表达式来捕获最大的二进制间隙" (数字的二进制表示中的零链)。
我为这个问题写的函数如下:
def solution(N):
max_gap = 0
binary_N = format(N, 'b')
list = re.findall(r'1(0+)1', binary_N)
for element in list:
if len(element) > max_gap:
max_gap = len(element)
return max_gap
它运作良好。但是......由于某种原因,它与10000010000000001
中的第二组零不匹配(66561
的二进制表示)。 9个零点不会出现在匹配列表中,因此它必须是正则表达式的问题 - 但我无法看到它与给定的每个其他示例相匹配的位置!
答案 0 :(得分:5)
同一位不能包含在两场比赛中。您的正则表达式与1
后跟一个或多个0
匹配,并以另一个1
结束。找到第一个匹配后,您将离开0000000001
并且不会以1
开头,因此您的正则表达式不匹配。
正如@JoachimIsaksson所提到的,如果你想匹配两组0,你可以使用lookahead,以便检查最终的1
,但不包括在匹配中。 r'1(0+)(?=1)'
。