HJ71_字符串通配符_多维递归
思路:1、对比字符最后一个,对比字符倒数第二个,一致对比到最后一个,如此递归。
2、该题符合多维递归,回溯判断。
遇到“*”通配符时,列举三种不同参数传递的递归情况,分叉递归以达到穷举的效果。(回溯)
3、结束条件:两字符串均为空,不计算“*”字符
具体,如代码所示。
#*只能匹配数字或字母0个或无数个
#?只能匹配一个数字或字母
#匹配不区分大小写
编程坑:
1、return的使用
2、多层调用return的返回
程序:
1 import sys 2 a=sys.stdin.readline().strip() 3 b=sys.stdin.readline().strip() 4 a=list(a.lower()) 5 b=list(b.lower()) 6 flag=[] 7 def check(a,b): 8 if a==[] and b==[]: 9 flag.append(1) 10 return 11 elif len(set(a))==1 and "*" in a: 12 flag.append(1) 13 return 14 if a==[] or b==[]:#如有一个为空则返回,防止后面判断数组超限。不能说明TRUE,也不能说明是false. 15 return 16 if a: 17 if a[-1]=="*": 18 if b[-1].isdigit() or b[-1].isalpha(): 19 #考虑到多种情况,多维递归在这里产生 20 check(a[:-1],b[:-1])#当*存在时,当数列分别除掉最后一个元素继续比较 21 check(a,b[:-1])#当*存在时,除掉b最后一个元素继续比较a数列 22 check(a[:-1],b)#当*存在时,除掉a最后一个元素继续比较b数列 23 elif a[-1]=="?": 24 if b[-1].isdigit() or b[-1].isalpha(): 25 check(a[:-1],b[:-1]) 26 else: 27 if a[-1]==b[-1]: 28 check(a[:-1],b[:-1]) 29 check(a,b) 30 if 1 in flag: 31 print("true") 32 else: 33 print("false")
标签:
python 刷题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix