最不符合中等题的一道题
滑动窗口秒了
因为?
就只有两个状态,即选0和选1。
- 这里就是找何时取0何时取1
- 此时我们设定两个(cur = str[i]、 ne = str[i + 1])指针作为一个滑动窗口, i 从0 ~ len(n)-2
- cur为窗口的第一个字符的指针,ne为第二个字符,设置state = int(cur + ne)判断当前窗口是否满足
- 当遍历到
state = 11
、state = 0
时就cnt += 1,此时的这两个字符合格,可以让i += 2
跳过这两个字符组合 - 当遍历到
state = 10
、state = 1
时,此时窗口内的两个字符不合格,窗口向后滑动一位i += 1
,看看下一个字符组合是否能够合格 - 当窗口中cur、 ne有一个是’?’时,就可以让’?’的字符位等于另一个指针里的数
str1 = input()
cnt = 0
i = 0
while i <= len(str1) - 2:
cur = str1[i]
ne = str1[i + 1]
if cur == '?':
cur = ne
i += 2
cnt += 1
continue
elif ne == '?':
ne = cur
i += 2
cnt += 1
continue
state = int(cur + ne)
if state == 1 or state == 10:
i += 1
continue
if state == 11 or state == 0:
i += 2
cnt += 1
print(cnt)
这道题太仁慈了,并没有出现“??”在首部,或者“??”前面的字串组合是满足条件的情况,以使得我的这串粗陋判断的代码能够AC,如果“??”出现在首部,我的窗口不能进行判断这种情况。亦或者出现“00??”、“11??”这种情况,我的窗口判断会因为在前面的两个字符组合是合格的而直接跳到“??”窗口,此时又会无法判断。这都是因为判断写的不够完美导致的,在此附上另一位大佬 @星开祈灵的代码:
s = input()
ans, i, n = 0, 0, len(s)
while i < n - 1:
if s[i] == s[i + 1] or s[i] == '?' or s[i + 1] == '?': # 能匹配
i += 1
ans += 1
i += 1 # 否则就匹配下一对
print(ans)