• Leetcode Regular Expression


    题目

    总结

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

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

    代码

    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;
        }
    
    };
    

      

  • 相关阅读:
    CF 461B Appleman and Tree
    POJ 1821 Fence
    NOIP 2012 开车旅行
    CF 494B Obsessive String
    BZOJ2337 XOR和路径
    CF 24D Broken robot
    POJ 1952 BUY LOW, BUY LOWER
    SPOJ NAPTIME Naptime
    POJ 3585
    CF 453B Little Pony and Harmony Chest
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3682648.html
Copyright © 2020-2023  润新知