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 };
  • 相关阅读:
    实验四 决策树算法及应用
    实验三 朴素贝叶斯算法及其应用
    计算机网络概述
    实验二——K近邻
    感知机及其应用
    面向对象设计与分析
    结构化分析和设计
    如何安装Dosbox并运行一个汇编代码
    如何解决从windows下载到ubuntu的中文安装包解压中文名出现乱码的情况
    实验一——visio的使用
  • 原文地址:https://www.cnblogs.com/huenchao/p/7641877.html
Copyright © 2011-2022 走看看