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

 

posted @ 2023-04-08 15:03  Aneverforget  阅读(39)  评论(0编辑  收藏  举报