【剑指Offer】 52.正则表达式匹配 python实现

题目描述

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

代码

# -*- coding:utf-8 -*-
'''
题目:请实现一个函数用来匹配包括'.'和'*'的正则表达式。
模式中的字符'.'表示任意一个字符(不包括空字符!),而'*'表示它前面的字符可以出现任意次(包含0次)。 
在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
'''
class Solution:
    # s, pattern都是字符串
    def match(self, s, pattern):
        # 如果s与pattern都为空,则True
        if len(s) == 0 and len(pattern) == 0:
            return True
        # 如果s不为空,而pattern为空,则False
        elif len(s) != 0 and len(pattern) == 0:
            return False
        # 如果s为空,而pattern不为空,则需要判断
        elif len(s) == 0 and len(pattern) != 0:
            # pattern中的第二个字符为*,则pattern后移两位继续比较
            if len(pattern) > 1 and pattern[1] == '*':
                return self.match(s, pattern[2:])
            else:
                return False
        # s与pattern都不为空的情况
        else:
            # pattern的第二个字符为*的情况
            if len(pattern) > 1 and pattern[1] == '*':
                # s与pattern的第一个元素不同,则s不变,pattern后移两位,相当于pattern前两位当成空
                if s[0] != pattern[0] and pattern[0] != '.':
                    return self.match(s, pattern[2:])
                else:
                    # 如果s[0]与pattern[0]相同,且pattern[1]为*,这个时候有三种情况
                    # pattern后移2个,s不变;相当于把pattern前两位当成空,匹配后面的
                    # pattern后移2个,s后移1个;相当于pattern前两位与s[0]匹配
                    # pattern不变,s后移1个;相当于pattern前两位,与s中的多位进行匹配,因为*可以匹配多位
                    return self.match(s, pattern[2:]) or self.match(s[1:], pattern[2:]) or self.match(s[1:], pattern)
            # pattern第二个字符不为*的情况
            else:
                if s[0] == pattern[0] or pattern[0] == '.':
                    return self.match(s[1:], pattern[1:])
                else:
                    return False

2

# -*- coding:utf-8 -*-
class Solution:
    # s, pattern都是字符串
    def match(self, s, pattern):
        # write code here
        count = 0
        if s == "":
            if pattern == ".":
                return False
            else:
                return True
        elif s != "":
            if pattern == "":
                return False
        count = 0
        a = -1
        for i in s:
            a += 1
            if pattern == "":
                return False
            else:
                if i == pattern[a]:
                    count += 1
                    pattern = pattern[a+1:]
                    a -= 1
                elif pattern[a]== ".":
                    count += 1
                    pattern = pattern[a+1:]
                    a -= 1
        if pattern == "":
            return True
        elif pattern[0] == "*":
            return True
        elif pattern[0] == ".":
            return False
        elif pattern[0] == "a":
            return False
        elif pattern[1] == "*":
            pattern = pattern[1+1:]
            if pattern == "":
                return True
            elif pattern[0] != "*":
                return False
        else:
            return False
发布了116 篇原创文章 · 获赞 6 · 访问量 6161

猜你喜欢

转载自blog.csdn.net/weixin_42247922/article/details/104061910