正则表达式匹配

正则表达式匹配_牛客网

https://www.nowcoder.com/practice/45327ae22b7b413ea21df13ee7d6429c?tpId=13&tqId=11205&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题目描述
请实现一个函数用来匹配包括'.'和''的正则表达式。模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配。

思路:当模式中的第二个字符是“*”时:
如果字符串第一个字符跟模式第一个字符不匹配,则模式后移2个字符,继续匹配。如果字符串第一个字符跟模式第一个字符匹配,可以有3种匹配方式:
1.模式后移2字符,相当于x*被忽略;
2.字符串后移1字符,模式后移2字符,相当于x*匹配一位;
3.字符串后移1字符,模式不变,即继续匹配字符下一位,相当于x*匹配多位;
当模式中的第二个字符不是“*”时:
如果字符串第一个字符和模式中的第一个字符相匹配,那么字符串和模式都后移一个字符,然后匹配剩余的部分。
如果字符串第一个字符和模式中的第一个字符相不匹配,直接返回False。

def match(self, s, pattern):
    # write code here
    #如果两者都为空,则匹配成功
    if (len(s) == 0 and len(pattern) == 0):
        return True
    #如果模式为空,字符串不为空,则匹配不成功
    if (len(s) > 0 and len(pattern) == 0):
        return False
    if len(pattern) > 1 and pattern[1] == '*':
        if s and (pattern[0] == '.' or s[0] == pattern[0]):
            f1 = self.match(s[1:], pattern)#多个
            f2 = self.match(s[1:], pattern[2:])#一个
            f3 = self.match(s, pattern[2:])#零个
            if f1 or f2 or f3:
                return True
            else:
                return False
        else:
            return self.match(s, pattern[2:])
    elif s and (pattern[0] == '.' or s[0] == pattern[0]):
            return self.match(s[1:], pattern[1:])
    #如果字符串为空,模式不为空,但模式长度等于1,或者模式长度大于1但第二个字符不为’*‘,则匹配不成功
    else:
        return False
全部评论

相关推荐

牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
16 收藏 评论
分享
牛客网
牛客企业服务