Leetcode Regular Expression

题目

 

总结

1. 得到一个教训, 对于模拟题来说, 需要检查为空和越界两种情况

2. look ahead 在自动机类型题目中是非常必要的, 要根据两个字符来判断控制流的走向

 

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class Solution {
public:
    bool isMatch(const char *s, const char *p) {
        int len1 = strlen(s);
        int len2 = strlen(p);
 
        if(len1 == 0 && len2 == 0) return true;
        //if(len1 == 0 && len2 != 0) return false;
        if(len1 != 0 && len2 == 0) return false;
 
 
        bool star = false;
        if(len2 >= 2 && *(p+1) == '*') star = true;
 
        if(!star)  {    // no star
            if(len1 == 0)
                return false;
             
            if(p[0] == '.' || p[0] == s[0]) {
                return isMatch(s+1, p+1);
            }
            return false;
        }
 
        // have star
        if(p[0] == '.')  {
             
            for(int k = 0; k <= len1; k ++)  {
                if(isMatch(s+k, p+2))
                    return true;
            }
 
        else  {
             
            if(isMatch(s, p+2))
                return true;
 
            for(int k = 1; k <= len1 && s[k-1] == p[0]; k ++)  {
                if(isMatch(s+k, p+2))
                    return true;
            }
 
        }
 
        return false;
    }
 
};

  

 

posted @   周卓  阅读(228)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· 开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案
· 【译】.NET 升级助手现在支持升级到集中式包管理
· 独立开发经验谈:如何通过 Docker 让潜在客户快速体验你的系统
· Tinyfox 发生重大改版
点击右上角即可分享
微信分享提示