通配符匹配

  1. 问题描述
    给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 ‘ ? ‘ 和 ‘ * ‘ 的通配符匹配。
    ‘ ? ‘ 可以匹配任何单个字符。
    ‘ * ‘ 可以匹配任意字符串(包括空字符串)
    s 可能为空,且只包含从 a-z 的小写字母。
    p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *

  2. 代码实现

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    var star=-1, match=0;
    var sp=0, pp=0;
    while(sp < s.length){
    if(pp<p.length && (s[sp] == p[pp] || p[pp] =="?")){
    sp++;
    pp++;
    }else if(pp<p.length && p[pp] == "*"){
    star = pp;
    match = sp;
    pp++;
    }else if(star != -1){
    pp = star + 1;
    match++;
    sp = match;
    }else return false;
    }
    while (pp < p.length && p[pp] == '*') pp++;
    return pp == p.length;