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))
};

 



posted @ 2019-02-14 21:01  mingL  阅读(102)  评论(0编辑  收藏  举报