zoukankan      html  css  js  c++  java
  • 29-Regular Expression Matching-leetcode

    ‘.’ 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

    题目难度:so hard!-参考别人思路
    思路:
    1.若下一个字符非星号,则必须完全匹配模式串中字符或’.’,匹配完转化为判定下一轮子问题。
    2..若下一个字符是星号,当前字符匹配可跳过星号进行匹配子问题,匹配成功返回,失败则以当前字符进行循环向前走再 转化为子问题求解,

    class Solution {
    public:
        bool isMatch(string s, string p) {
            int ns=s.size(),np=p.size();
            if(np==0)return ns==0;
            int beg=0;
            int sn =0; 
            if(p[beg+1]!='*'){
                if(s[beg]==p[beg]||(p[beg]=='.'&&s[beg]!=''))
                    return isMatch(string(s,beg+1,ns-1),string(p,beg+1,np-1));
                else return false;
            }
            else{
                while(s[sn]==p[beg]||(p[beg]=='.'&&s[sn]!='')){
                    if(isMatch(string(s,sn,ns-sn),string(p,beg+2,np-2)))
                        return true;
                    sn++;
                }
            }
            return isMatch(string(s,sn,ns-sn),string(p,beg+2,np-2));
        }
    };
  • 相关阅读:
    [LeetCode]Add Binary
    基于Servlet、JSP、JDBC、MySQL的一个简单的用户注冊模块(附完整源代码)
    C语言scanf函数详解
    三层架构(我的理解及具体分析)
    HTML5系列之——applicationCache对象
    分布式系统浅析
    HDU 4421 Bit Magic (图论-2SAT)
    软考总结
    javabean总结
    linux经常使用命令
  • 原文地址:https://www.cnblogs.com/freeopen/p/5482954.html
Copyright © 2011-2022 走看看