zoukankan      html  css  js  c++  java
  • 正则表达式匹配

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

    python solution:

    # -*- coding:utf-8 -*-
    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
    

    自己写了一遍:

    # -*- coding:utf-8 -*-
    class Solution:
        # s, pattern都是字符串
        def match(self, s, pattern):
            if len(s)==0 and len(pattern)==0:
                return True
            if len(pattern)==0 and len(s)!=0:
                return False
            if len(s)==0:
                if len(pattern)>1 and pattern[1]=='*':
                    return self.match(s,pattern[2:])
                else:
                    return False
            else:
                if len(pattern)>1 and pattern[1]=='*':
                    if s[0]!=pattern[0] and pattern[0]!='.':
                        return self.match(s,pattern[2:])
                    else:
                        return self.match(s,pattern[2:]) or self.match(s[1:],pattern[2:]) or self.match(s[1:],pattern)
                else:
                    if pattern[0]==s[0] or pattern[0]=='.':
                        return self.match(s[1:],pattern[1:])
                    else:
                        return False
    
    
  • 相关阅读:
    Mysql----8 联表查询 嵌套查询 inner join on left join on right join on
    Mysql---7 where 条件语句
    Mysql---6 Select 查询数据的方式
    Mysql---5(DML) 外键constraint不推荐 表中数据的insert into values update set where delete from where truncate
    Mysql---4 修改表字段操作(增,删,改,重命名)
    Mysql ---3创建表
    小米r3g旧版开发版固件,安装opkg
    git clone
    2.使用vue ui命令快速构建应用
    动态加载css,js
  • 原文地址:https://www.cnblogs.com/bernieloveslife/p/10431232.html
Copyright © 2011-2022 走看看