• 10. Regular Expression Matching(js)


    10. Regular Expression Matching

    Given an input string (s) and a pattern (p), 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).

    Note:

    • s could be empty and contains only lowercase letters a-z.
    • p could be empty and contains only lowercase letters a-z, and characters like . or *.

    Example 1:

    Input:
    s = "aa"
    p = "a"
    Output: false
    Explanation: "a" does not match the entire string "aa".
    

    Example 2:

    Input:
    s = "aa"
    p = "a*"
    Output: true
    Explanation: '*' means zero or more of the precedeng element, 'a'. Therefore, by repeating 'a' once, it becomes "aa".
    

    Example 3:

    Input:
    s = "ab"
    p = ".*"
    Output: true
    Explanation: ".*" means "zero or more (*) of any character (.)".
    

    Example 4:

    Input:
    s = "aab"
    p = "c*a*b"
    Output: true
    Explanation: c can be repeated 0 times, a can be repeated 1 time. Therefore it matches "aab".
    

    Example 5:

    Input:
    s = "mississippi"
    p = "mis*is*p*."
    Output: false
    题意:给定一个字符串和匹配模板,返回是否匹配成功
    代码如下(js):
    var isMatch = function(s, p) {
        //1.如果s为空,p也为空,返回true
          if(p.length===0) return s.length===0;  
          //2.如果s长度为1,p长度也为1,若p=s或者p='.'则返回true
          if(p.length===1)  return (s.length==1) && (s[0]===p[0] || p[0]==='.');
                //3.若p的第二个字符不为*
          if(p[1]!=='*'){
              //如果s为空,返回false
              if(s.length===0) return false;
              return (s[0]===p[0] || p[0]==='.') && isMatch(s.substr(1),p.substr(1));
          }
          //4.若p的第二个字符为*,比较s的第一个字符和p的第一个字符
          while(s.length>0 && (s[0]===p[0] || p[0]==='.') ){
              if(isMatch(s,p.substr(2))) return true;
              s=s.substr(1);
          }
        return isMatch(s,p.substr(2))
    };


  • 相关阅读:
    bzoj1218 本来dp 但是数据弱 枚举可过
    bzoj1816二分答案 扑克牌
    bzoj2748 水dp
    最长上升子序列(nlog n)
    bzoj1798线段树。。调的要死
    HTML5 移动开发 (HTML5标签和属性)
    关于全屏布局
    关于z-index这个层级的问题
    面板数据模型
    竞争模型
  • 原文地址:https://www.cnblogs.com/xingguozhiming/p/10380715.html
Copyright © 2020-2023  润新知