剑指offer:019正则表达式匹配

"""
题目:请实现一个函数用来匹配包括‘.’和‘*’的正则表达式。模式中的字符‘.’表示任意一个字符,而"*"表示它前面的字符可以出现
任意次(包括0次)。例如,字符串“aaa”与模式“a.a”和“ab*ac*a”匹配,但与“aa.a”和"ab*a"均不匹配
"""


class Solution:

    def __init__(self, string, pattern):
        self.string = string
        self.pattern = pattern
        self.pattern_length = len(pattern)
        self.string_length = len(string)

    def function(self):
        if self.string is None or self.pattern is None:
            return False
        return self.match(0, 0)

    def match(self, string_index, pattern_index):
        # 判断当前两个指针是否越界
        # 同时越界, 说明全部匹配成功, 程序结束
        if string_index >= self.string_length and pattern_index >= self.pattern_length:
            return True

        # 如果string_index没有走完,但是pattern_index走完了,那就肯定匹配不成功
        if string_index < self.string_length and pattern_index >= self.pattern_length:
            return False
        # 剩下的一种情况,string_index走完,pattern_index没有走完,可能是a*

        # 当前子串(以指针开头)第二个字符是‘*', 比较复杂
        if pattern_index+1 < self.pattern_length and self.pattern[pattern_index+1] == '*':
            # 首字符匹配成功
            if ((string_index < self.string_length) and self.string[string_index] == self.pattern[pattern_index]) or \
                    (self.pattern[pattern_index] == '.' and string_index < self.string_length):
                return self.match(string_index+1, pattern_index) or self.match(string_index+1, pattern_index+2) or \
                    self.match(string_index, pattern_index + 2)
            # 如果匹配不成功,那只能把(首字符*)忽略掉了,不然就得当成匹配不成功
            else:
                return self.match(string_index, pattern_index+2)

        # 当前子串第二个字符不是‘*’,情况比较简单
        # 当前子串的第一个字符匹配成功,两个索引指针同时向后挪
        if ((string_index < self.string_length) and self.string[string_index] == self.pattern[pattern_index]) or \
                (self.pattern[pattern_index] == '.' and string_index < self.string_length):
            return self.match(string_index+1, pattern_index+1)

        return False


if __name__ == '__main__':
    # 测试用例
    # string = 'aaa'
    # pattern = 'a.*a' # 匹配

    # string = 'aaa'
    # pattern = 'ab*ac*a' # 匹配

    string = 'aaa'
    pattern = 'ab*a'  # 不匹配

    s = Solution(string, pattern)
    print(s.function())

Windows 系统修复工具主要用于解决 Windows 11/10 系统中的各种常见问题,具有操作简单、功能全面等特点: 文件资源管理器修复:可解决文件资源管理器卡死、崩溃、无响应等问题,能终止崩溃循环。还可修复右键菜单无响应或选项缺失问题,以及重建缩略图缓存,让图片、视频等文件的缩略图正常显示,此外,还能处理桌面缺少回收站图标、回收站损坏等问题。 互联网和连接修复:能够刷新 DNS 缓存,加速网页加载速度,减少访问延迟。可重置 TCP/IP 协议栈,增强网络连接稳定性,减少网络掉线情况,还能还原 Hosts 文件,清除恶意程序对网络设置的篡改,保障网络安全,解决电脑重装系统后网络无法连接、浏览器主页被篡改等问题。 系统修复:集成系统文件检查器(SFC),可自动扫描并修复受损的系统文件。能解决 Windows 激活状态异常的问题,还可重建 DLL 注册库,恢复应用程序兼容性,解决部分软件无法正常运行的问题,同时也能处理如 Windows 沙箱无法启动、Windows 将 JPG 或 JPEG 保存为 JFIF 等系统问题。 系统工具维护:提供启动管理器、服务管理器和进程管理器等工具,用户可控制和管理启动程序、系统服务和当前运行的进程,提高系统的启动和运行速度,防止不必要的程序和服务占用系统资源。还能查看系统规格,如处理器线程数、最大显示分辨率等。 故障排除:集成超过 20 个微软官方诊断工具,可对系统问题进行专业排查,还能生成硬件健康状态报告。能解决搜索和索引故障、邮件和日历应用程序崩溃、设置应用程序无法启动等问题,也可处理打印机、网络适配器、Windows 更新等相关故障。 其他修复功能:可以重置组策略设置、catroot2 文件夹、记事本等多种系统设置和组件,如重置 Windows 应用商店缓存、Windows 防火墙设置等。还能添加重建图标缓存支持,恢复粘滞便笺删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值