题解 | #字符串通配符#
字符串通配符
https://www.nowcoder.com/practice/43072d50a6eb44d2a6c816a283b02036
import sys
(
s0,
s1,
*_,
) = sys.stdin.read().split()
s0, s1 = s0.lower(), s1.lower()
p0, p1 = 0, 0
# c = None
# while True:
# if p0>=len(s0) or p1>=len(s1):
# if p0==len(s0) and p1==len(s1): break
# if None is c: break
# (s, p0, p1) = c
# s += 1
# c = (s, p0, p1)
# p0+=1
# p1+=s
# if p1>=len(s1): break
# # print("abc", p0, p1, s0[p0], s1[p1], c, s)
# continue
# # print(p0, p1, s0[p0], s1[p1], c)
# a = ord(s1[p1])
# if (a<ord('a') or a>ord('z')) and s1[p1] not in '12.': print("false"); exit()
# if s0[p0] == s1[p1] or '?' == s0[p0]:
# p0+=1
# p1+=1
# continue
# if '*' == s0[p0]:
# s = 0
# c = (s, p0, p1)
# p0+=1
# p1+=s
# continue
# if None is not c:
# (s, p0, p1) = c
# s += 1
# c = (s, p0, p1)
# p0+=1
# p1+=s
# continue
# print("false"); exit()
# if p0==len(s0) and p1==len(s1):
# print("true")
# else:
# print("false")
S = set(
[chr(i) for i in range(ord("a"), ord("z") + 1)]
+ [chr(i) for i in range(ord("0"), ord("9") + 1)]
+ [*"."]
)
import functools
@functools.cache
def dfs(s0, s1):
# print(s0, s1)
if len(s0) == 0 or len(s1) == 0:
return len(s0) == 0 and len(s1) == 0
if s1[0] not in S: return False
if s0[0] == s1[0]: return dfs(s0[1:], s1[1:])
if "?" == s0[0]: return dfs(s0[1:], s1[1:])
if "*" == s0[0]:
for i in range(len(s1)+1):
if dfs(s0[1:], s1[i:]): return True
return False
print("true" if dfs(s0, s1) else "false")
