题解 | #字符串通配符#
字符串通配符
https://www.nowcoder.com/practice/43072d50a6eb44d2a6c816a283b02036
写长一点方便每步都加注释容易理解。同时注意必须要加visit防止重复递归进入死循环。可用最后一个case正序和倒序输入测试是否会死循环。
def fun2():
def dfs(s: str, rule: str):
# 递归边界判断
if (s, rule) in visit: # 当前组合已经访问过了就抬走
return False
visit.append((s, rule))
if s == "" and rule == "": # s完毕且rule刚好完毕,ok
return True
elif s != "" and rule == "": # s未完毕,rule完毕,gg
return False
elif s == "" and rule != "": # s完毕,rule未完毕,看rule是否只剩下*
if rule.replace("*", "") == "": # 只剩下*,ok
return True
else: # 还有其他rule值,gg
return False
# 开始递归
if s[0] == rule[0]: # 直接就相等抬走下一位
return dfs(s[1:], rule[1:])
else:
if rule[0] == "?" and s[0].isalnum(): # 是?的时候必须要是数字字母才进入匹配
return dfs(s[1:], rule[1:])
elif rule[0] == "*": # 是*的时候分进入和跳过
if s[0].isalnum() and dfs(s[1:], rule): # * 匹配,s往后移
return True
elif dfs(s, rule[1:]): # * 不匹配, rule往后移
return True
else:
return False
rule, s, visit = input().lower(), input().lower(), []
print("true" if dfs(s, rule) else "false")
fun2()

查看1道真题和解析