HOT100——正则表达式匹配(JS实现)
原创
©著作权归作者所有:来自51CTO博客作者wb59770b05237ae的原创作品,请联系作者获取转载授权,否则将追究法律责任
题目描述
![HOT100——正则表达式匹配(JS实现)_递归](https://s2.51cto.com/images/blog/202112/16144958_61bae196021d192242.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
解题思路
- 本题采用的是回溯的思想。
- 主要需要考虑的情况有以下几种
- 字符串和模式串的字符相等。
- 模式串的字符为点。
- 模式串为*的时候,分两种情况讨论,一是0次,一是多次。
解题代码
var isMatch = function (s, p) {
return helper(s, p);
function helper(str, pattern) {
if (pattern.length === 0) {
if (str.length === 0) {
return true;
} else {
return false;
}
}
// 不是 * 号的情况
if (str.length > 2 && (str[0] === pattern[0] || pattern[0] === '.') && pattern[1] !== '*') {
res = helper(str.slice(1),pattern.slice(1));
} else if (str.length > 0 && (str[0] === pattern[0] || pattern[0] === '.') && pattern[1] === '*'){
// 这是 *号 代表0次的情况 多次的情况
res = helper(str,pattern.slice(2)) || helper(str.slice(1),pattern)
} else {
if (str.length > 0 && (str[0] === pattern[0] || pattern[0] === '.') && pattern[1] !== '*') {
res = helper(str.slice(1),pattern.slice(1));
} else if (pattern[1] === '*') {
res = helper(str,pattern.slice(2))
} else {
return false;
}
}
return res;
}
};
启示