zoukankan      html  css  js  c++  java
  • [LeetCode] Regular Expression Matching(递归)

    Implement regular expression matching with support for '.' and '*'.

    '.' Matches any single character.
    '*' Matches zero or more of the preceding element.
    
    The matching should cover the entire input string (not partial).
    
    The function prototype should be:
    bool isMatch(const char *s, const char *p)
    
    Some examples:
    isMatch("aa","a") → false
    isMatch("aa","aa") → true
    isMatch("aaa","aa") → false
    isMatch("aa", "a*") → true
    isMatch("aa", ".*") → true
    isMatch("ab", ".*") → true
    isMatch("aab", "c*a*b") → true
    
    class Solution {
    public:
        bool isMatch(const char *s, const char *p) {
            if (*p == '') return *s == '';  //empty
    
            if (*(p + 1) != '*') {//without *
                if(!matchFirst(s,p))
                    return false;
                return isMatch(s + 1, p + 1);
            } else { //next: with a *
                if(isMatch(s, p + 2)) 
                    return true;    //try the length of 0
                while ( matchFirst(s,p) )       //try all possible lengths 
                    if (isMatch(++s, p + 2))
                        return true;
            }
        }
    private:
        bool matchFirst(const char *s, const char *p){
            return (*p == *s || (*p == '.' && *s != ''));
        }
    };    
  • 相关阅读:
    java中finally的使用
    String基本方法
    java文件读写常用方法
    java笔试面试(转载)
    单链表的反转
    单链表的冒泡排序
    Java快速教程
    Java快速教程
    后海日记(4)
    后海日记(3)
  • 原文地址:https://www.cnblogs.com/Xylophone/p/3938341.html
Copyright © 2011-2022 走看看