题解 | #字符串通配符#

字符串通配符

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')

全部评论

相关推荐

zhiyog:哈哈哈哈哈哈哈哈哈哈哈哈哈
点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-29 17:30
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务