题解 | #字符串通配符#
字符串通配符
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()