第一行:模式串 `p` (长度不超过20)
第二行:目标串 `s` (长度不超过
)
保证输出的总行数不超过。
对每一个匹配子串输出 `匹配起始位置 匹配的长度`(空格分隔)一行;若无匹配输出 `-1 0`。
shopee*.com shopeemobile.com
0 16
0 起始位置,16长度
*.com shopeemobile.com
0 16 1 15 2 14 3 13 4 12 5 11 6 10 7 9 8 8 9 7 10 6 11 5 12 4
o*m shopeemobile.com
2 5 2 14 7 9 14 2
a = input()
panduan = list(a.split('*'))
b = input()
a,c,lenb = a.replace('*','.*'),[],len(b)
for i in range(len(panduan)):
if not panduan[i] in b:
print('-1 0')
quit()
from re import match
for i in range(lenb):
for j in range(i+1,lenb+1):
k = b[i:j]
d = f'{i} {j-i}'
kd = [k,d]
c.append(kd)
for i in c:
pi = match(a,i[0])
if pi:
ans = pi.group()
if ans == i[0]:
print(i[1]) 首先将a以*号分割成为几部分,如果这几部分有任意一部分不在b中,那么就直接输出-1 0并且quit,可以直接跳出整个程序,就没有必要再写else了,然后将a中的*换成一个点加*号,这是很重要的正则表达式,从re中导入match,取出b中所有的连续子串,这个方法是通用必会的,同时,将对应要输出的字符串提前加入到列表中,统一存到列表c中,然后对所有的连续子串,我们使用match去匹配,这里match的返回值有点奇怪,有可能为none,所以必须要使用if条件句,并且使用group去取出最后匹配的值,因为这里已经是分割成所有子串了,所以需要严格匹配子串本身,如果取出的值等于子串本身,我们直接输出之前准备好的字符串即可