其他分享
首页 > 其他分享> > NO44. 通配符匹配

NO44. 通配符匹配

作者:互联网

#和之前通配符匹配很像,dp的思路
class Solution:
    def isMatch(self, s: str, p: str) -> bool:
        vertical = len(p)+1 #纵向的长度,由于有初始start因此加一
        level = len(s)+1
        if set(p) == {"*"}: return True # *可以匹配包括空字符
        #建表
        table = [[False]*level for i in range(vertical)] #初始化全为False
        table[0][0] = True     
        if p.startswith('*'):
            table[1] = level*[True]
        for i in range(1,vertical):
            path = False
            for j in range(1,level):
                if p[i-1]=='*': #判断出现'*'情况
                    if table[i-1][0]==True: #如果第一行为*,那全为True
                        table[i] = [True]*level
                    if table[i-1][j]: #如果上一行为True,令标志True
                        path = True
                    if path:#只要顶上有了True,就可以开通*接下来的所有道路  
                        table[i][j]=True
                elif p[i-1] == "?" or p[i-1]==s[j-1]:#先判断字母是否符合
                    table[i][j] = table[i-1][j-1] #再看左上方格子是不是T
        return table[vertical-1][level-1]
#https://leetcode.cn/problems/wildcard-matching/solution/yi-ge-qi-pan-kan-dong-dong-tai-gui-hua-dpsi-lu-by-/
#该博主的dp讲法很清晰

 

 

标签:NO44,匹配,vertical,level,False,通配符,path,table,True
来源: https://www.cnblogs.com/158-174/p/16502743.html