题解 | #字符串通配符#

字符串通配符

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

全部评论

相关推荐

面向对象的火龙果很爱...:去吃一顿炸鸡就走
点赞 评论 收藏
分享
叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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