首先先梳理思路: 关于p中包含的内容有以下几种情况:
例如:s=aa,p=a;s=aa,p=aa,第一种结果失败,因为不能覆盖整个字符串;第二个:成功
例如:s=aa,p=ab.;s=aa,p=a.;s=aa,p=b. 第一种:失败,长度不同,第二种:成功,第三种:长度相同,但是元素不同,失败
例如:s=aaa,p=aaa*;s=aaa,p=a*;s=aaa,p=b* 第一种成功,第二种成功,第三种失败,因为有不同元素
例如:s=aab,p=a.*,p只要从有字母的时候开始,跟s一样,都能成功;s=aab,p=.a* s=aab,p=a*a.
pythonclass Solution:
def isMatch(self, s: str, p: str):
if '*' not in p and '.' not in p:
if s==p:
return True
else:
return False
elif '*' not in p and '.' in p:
if len(s)==len(p):
p = p.replace('.','')
if set(s)-set(p):
return False
else:
return True
else:
return False
elif '.' not in p and '*' in p:
p = p.replace('*','')
if set(s)-set(p):
return False
else:
return True
elif '.*' in p:
p = p.replace('.*','')
if not p:
return True
if set(s)-set(p):
return False
else:
return True
else:
p = p.split('*')
r = 0
for i in p:
if i:
if set(s[:len(i)]) -set(i):
r-=1
if len(s):
pass
通过测试用例:177 / 353
pythonelif '.*' in p:
p = p.replace('.*','')
if not p:
return True
if set(s)-set(p):
return False
else:
return True
else:
p = p.split('*')
r = 0
start = 0
for i in p:
if i:
if set(s[start:len(i)]) -set(i):
r-=1
start=len(i)
if r>=0:
return True
else:
return False
通过测试用例:
200 / 353
pythonp = p.split('*')
r = 0
start = 0
for i in p:
if i:
if set(s[start:start+len(i)]) -set(i):
r-=1
start=len(i)
if r>=0:
return True
else:
return False
通过测试用例:
201 / 353
本文作者:Eric
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!