zoukankan      html  css  js  c++  java
  • 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;
        }
    
    };
    

      

  • 相关阅读:
    【题解】小Z的袜子
    浅谈最小生成树
    【题解】钻石收藏家
    浅谈线段树
    浅谈拓扑排序
    浅谈树的直径和树的重心
    浅谈求逆序对
    浅谈欧拉回路
    浅谈离散化
    浅谈高斯消元
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3682648.html
Copyright © 2011-2022 走看看