赞
踩
个人感觉比较好理解的是回溯的方法:
class Solution: def isMatch(self, s: str, p: str) -> bool: lens=len(s) lenp=len(p) steps=0 stepp=0 p_star_idx=-1 s_p_star_idx=-1 while steps<lens: if stepp<lenp and p[stepp] in ['?',s[steps]]: steps+=1 stepp+=1 elif stepp<lenp and p[stepp]=='*': p_star_idx=stepp s_p_star_idx=steps stepp+=1 elif p_star_idx==-1: return False else: stepp=p_star_idx+1 steps=s_p_star_idx+1 s_p_star_idx=steps while stepp<lenp and p[stepp]=='*': stepp+=1 return stepp==lenp
可能比较难理解的地方就是那个p_star_idx和s_p_star_idx的用法,这两个就是分别记录*出现的地方和可能的下一次匹配的地点。
理解了这个,这种思路也就理解了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。