2020-11-20 明略科技集团 2021 校招笔试-前端类 B卷 编程题第二题
牛客网原题:CD136
题目描述
对于字符串str,其中绝对不含有字符.
和*
。再给定字符串exp,其中可以含有.
或`*
,*
字符不能是exp的首字符,并且任意两个*
字符不相邻。exp中的.
代表任何一个字符,exp中的*
表示*
的前一个字符可以有0个或者多个。请写一个函数,判断str是否能被exp匹配(注意:输入的数据不保证合法,但只含小写字母和.
和*
)。
输入
输出
备注
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| function canMatch( str, exp ){ if( str.indexOf("*") != -1 || str.indexOf("*") != -1 || exp.indexOf("*") == 0 || exp.indexOf("**") != -1 ) return false; while( str.length && exp.length ){ let currExp = exp[0]; let nextIsX = false; if( exp.length>1 && exp[1] == "*" ) nextIsX = true; if( currExp == '.' ) currExp = str[0]; if( nextIsX ){ while( str[0] == currExp ){ str=str.substr( 1 ); } while( exp[0] == currExp || exp[0] == "*" ){ exp=exp.substr( 1 ); } } else if( currExp == str[0] ){ str=str.substr( 1 ); exp=exp.substr( 1 ); } else { return false; } } return str.length && exp.length ? false : true; }
console.log( canMatch( "aaaabc", "a*abc" ) )
|