题解 | #字符串通配符#
字符串通配符
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')
查看11道真题和解析
