zoukankan      html  css  js  c++  java
  • 10. 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
     1 /**
     2  * @param {string} s
     3  * @param {string} p
     4  * @return {boolean}
     5  */
     6 var isMatch = function(s, p) {
     7     
     8     
     9     //首先最简单的是 s,p中都不出现正则元字符 这样如果s==p 就ok
    10     //问题是出现了元字符 比如+ * 这种就比较麻烦,我想到的是直接用分治
    11     //举例来说  s->"abcd"  p->"ae*bcd"  我们在比较 b和e时候,很快又发现e后面有个*,这个时候我们可以分类去比较
    12     //一种是去比较  bcd bcd   一种是去比较 bcd 和 e*bcd 
    13     
    14     //最后我们还要考虑 . 这个字符,因为他通配
    15     
    16      
    17     var slen = s.length;
    18     var plen = p.length;
    19     
    20     if(plen == 0){
    21 
    22         return  slen == 0;
    23     }
    24 
    25     if ('*' == p[1]){
    26            
    27         //一种就是直接把*当成0次,
    28         //另外一种就是直接当成一次。
    29            return (isMatch(s, p.substr(2)) || slen!== 0 && (s[0] == p[0] || '.' == p[0]) && isMatch(s.substr(1), p));
    30     }else{
    31            return  slen!== 0 && (s[0] == p[0] || '.' == p[0]) && isMatch(s.substr(1), p.substr(1));
    32     }
    33            
    34     
    35 };
  • 相关阅读:
    WordPress Editorial Calendar插件权限安全绕过漏洞
    Linux kernel 本地拒绝服务漏洞
    Linux kernel ‘evm_update_evmxattr’函数拒绝服务漏洞
    VB6-ListView的排序和点滴
    VB6IDE改造
    杂记-匆匆北京行
    第60篇随笔:《道法自然》读书笔记
    VB6 AddIns 控件样式模板
    VB6-改造ComUnit(免除用例名称注册)
    VB6-设计模式点滴
  • 原文地址:https://www.cnblogs.com/huenchao/p/7641877.html
Copyright © 2011-2022 走看看