编辑
2022-12-22
🤓算法
00
请注意,本文编写于 910 天前,最后修改于 225 天前,其中某些信息可能已经过时。

目录

第一次写出来的代码
第二次修改的代码
第三次

首先先梳理思路: 关于p中包含的内容有以下几种情况:

  1. p中不包含. 和* 例如:s=aa,p=a;s=aa,p=aa,第一种结果失败,因为不能覆盖整个字符串;第二个:成功
  2. P中仅包含. 例如:s=aa,p=ab.;s=aa,p=a.;s=aa,p=b. 第一种:失败,长度不同,第二种:成功,第三种:长度相同,但是元素不同,失败
  3. p中仅包含* 例如:s=aaa,p=aaa*;s=aaa,p=a*;s=aaa,p=b* 第一种成功,第二种成功,第三种失败,因为有不同元素
  4. p中包含* . 例如:s=aab,p=a.*,p只要从有字母的时候开始,跟s一样,都能成功;s=aab,p=.a* s=aab,p=a*a.

第一次写出来的代码

python
class 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

第二次修改的代码

  • 只将最后的逻辑补充了一下
python
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 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

第三次

  • 取值范围修改
python
p = 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 许可协议。转载请注明出处!