题解 | #字符串通配符#
字符串通配符
https://www.nowcoder.com/practice/43072d50a6eb44d2a6c816a283b02036
def fun(str1, str2): #结果返回部分: #从后往前一个个字符进行匹配,直到最后一个字符匹配完成,有以下三种情况: #1、str1和str2都回退到空,证明前面都已经匹配上,返回true if str1=='' and str2=='': return True #str1已经匹配到最前面为空,但str2还存在字符,那么就是没有匹配上,返回false elif str1=='' and str2!='': return False #str1未匹配为空,str2已经匹配为空,那么又存在2种情况 elif str1!='' and str2=='': #如果是*可以匹配0个或者以上字符,所以*也可以匹配空,不影响 if str1=='*': return True else: return False #递推部分: else: m,n = len(str1),len(str2) #当匹配时,如果两个字符都相等或者是通配符?,且str2匹配是数字和英文字母,那么接着匹配前一个字符, if str1[m-1] == str2[n-1] or (str1[m-1] =='?' and str2[n-1].isalnum()): return fun(str1[:m-1],str2[:n-1]) #如果匹配到通配符*,那么*可以匹配0到多个字符,那么存在2种情况:1、*匹配0个,那么接着将str1往前匹配,如果刚好跟str2未裁剪的最后一个字符一致,那么证明*确实匹配0个字符。2、*匹配多个,不断递推,直到前面第一种情况成立 elif str1[m-1] == '*': return fun(str1[:m-1],str2) or fun(str1,str2[:n-1]) else: return False #不区分大小,统一成小写方便比较 str1,str2 = input().lower(),input().lower() if fun(str1,str2): print('true') else: print('false')