题解 | #字符串通配符#学习大佬的递归思维,YYDS

字符串通配符

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

def fun(str1, str2):

    if str1 == '' and str2 == '':
        return True
    elif str1 == '' and str2 != '':
        return False
    elif str1 != '' and str2 == '':
        if str1.replace('*', '') == '':
            return True
        else:
            return False
    else:
        m, n = len(str1), len(str2)
        if str1[m-1] == str2[n-1] or (str1[m-1] == '?' and str2.isalnum()):
            return fun(str1[:m-1], str2[:n-1])
        elif str1[m-1] == '*':
            return fun(str1[:m-1], str2) or fun(str1, str2[:n-1])
        else:
            return False

while True:
    
    try:
        str1, str2 = input().lower(), input().lower()
        if fun(str1, str2):
            print('true')
        else:
            print('false')
        
    except:
        break
全部评论
第12行最后应该为and str2[n-1].isalnum()
11 回复 分享
发布于 2022-12-10 20:59 陕西
这是人做的题目么
9 回复 分享
发布于 2022-06-17 21:06
第15行 改为 return fun(str1[:m-1], str2) or fun(str1, str2[:n-1]) or fun(str1[:-1],str2[:-1])
1 回复 分享
发布于 2023-04-03 15:25 湖南
te.?t*.* te.at12.x 这个用例过不了,isalnum不应该判断整个str2,而是应该判断递推的最后一个字符是否是字母和数字
1 回复 分享
发布于 2023-05-23 15:48 上海
第十四行也要判断受str2【n-1】是不是可替换的字符并分情况处理
1 回复 分享
发布于 2023-08-22 23:16 浙江
or fun(str1, str2[:n-1]) 请问这个or怎么理解啊
点赞 回复 分享
发布于 2023-03-03 00:01 湖北
这个是从后往前匹配的,我想知道从前往后匹配从算法上来讲是不是也可以呢?
点赞 回复 分享
发布于 2023-04-01 12:03 陕西
h # *?*a h # aa # 这个输入不符合规定吗? 代码应该修改下吧,str2[n-1].isalnum()
点赞 回复 分享
发布于 2023-05-05 17:03 上海
isalnum()函数不严谨,该函数检查字符串是否由字母[a-z,A-Z](也包括构成其它语言的字符,如汉字,俄文,日文,韩文)或数字[0-9]及其组合组成的,如果是则返回True,否则返回False
点赞 回复 分享
发布于 2023-05-10 17:16 贵州
这思路好牛啊,
点赞 回复 分享
发布于 2023-05-23 09:47 陕西
简单的反例 * @
点赞 回复 分享
发布于 2023-06-13 18:33 香港
第11行的m,n不需要,下面的【m-1】和【n-1】用【-1】就行
点赞 回复 分享
发布于 2023-10-11 16:27 上海
return fun(str1[:m-1], str2) or fun(str1, str2[:n-1]) 是怎么判断选择走哪一个? fun(str1[:m-1], str2) or fun(str1, str2[:n-1])
点赞 回复 分享
发布于 2023-11-06 03:01 上海
一个复杂度超高的反例: ahh***h**h*ah**ha*h*h haahaaahahhhahhhahahhaaahahhahhaaahhhhahhaahhahhhhhhh 这里的程序给5分钟也运行不出来。
点赞 回复 分享
发布于 2023-12-17 22:07 贵州
if str1.replace('*', '') == '': return True这行是不是如果str1=*,str2为空,也可以返回true的意思
点赞 回复 分享
发布于 01-18 22:37 浙江
这种方法很容易超时
点赞 回复 分享
发布于 03-02 14:18 广东
第15行判断少了一个 or fun(str1[:-1],str2[:-1]); 其他人别争了,这个是正确的。
点赞 回复 分享
发布于 08-29 17:31 广东
很容易超时,感觉需要一个缓存来保存当前的状态
点赞 回复 分享
发布于 10-02 23:08 浙江

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
评论
41
10
分享
牛客网
牛客企业服务