高赞回答的详细注释版 (递归思维,从后向前)

字符串通配符

https://www.nowcoder.com/practice/43072d50a6eb44d2a6c816a283b02036

def fun(s1, s2):
    # 如果最终递归到2个字符都为空字符串,则为true
    if s1 == '' and s2 == '':
        return True
    # 最终递归到s1为空,s2不为空,则为False
    elif s1 == '' and s2 != '':
        return False
    # s1=='*' (*可替代0个字符),而s2为空,也为true
    elif s1 != '' and s2 == '':
        if s1.replace('*', '')  == '':
            return True
        else:
            return False
    else:
        m, n = len(s1), len(s2)
        # 如果最后一个字符相同 或 s1最后一个字符为?,且s2由字母和数字组成(即s2最后一个字符可由?替代,s2[n-1].isalnum()也可)
        if s1[m-1] == s2[n-1] or (s1[m-1]=='?' and s2.isalnum()):    # .isalnum()检测字符串是否由字母和数字组成,
            return fun(s1[:m-1], s2[:n-1])
        elif s1[m-1] == '*':
            # *替代0个字符 或 替代多个字符
            return fun(s1[:m-1], s2) or fun(s1, s2[:n-1])
        else:
            return False

 
while True:
    try:
        # 不区分大小写   
        s1 = input().lower()
        s2 = input().lower()

        if fun(s1, s2):
            print('true')
        else:
            print('false')

    except:
        break

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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