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