剑指OFFER 正则表达式匹配
剑指OFFER 正则表达式匹配
写这道题花了很长的时间,提交了无数次,果然是HARD的难度.搜了别人的博客,有两种解法,一种是递归,一种是动态规划.目前我只实现了递归,代码也有点乱,蛮多边界条件需要考虑的.
递归题解
class Solution {
public:
string s;
string p;
int s_size;
int p_size;
bool ok = false;
void recur(int sp,int pp)
{
if(sp >= s_size)
{
if(pp < p_size && p[pp+1]=='*'){
recur(sp,pp+2);
return;
}
if(pp >= p_size){
ok = true;
return;
}
return;
}
if(pp >= p_size){
return;
}
if(pp+1<p_size && p[pp+1] == '*'){
if(p[pp]=='.' || s[sp]==p[pp])
recur(sp+1,pp); // * 令该字符出现1次,多次递归就相当于出现多次了
recur(sp,pp+2);// * 令该字符为出现次数为0
}
if(p[pp]=='.' || s[sp]==p[pp]){
recur(sp+1,pp+1);
}
}
bool isMatch(string s_str, string p_str) {
s_size = s_str.size();
p_size = p_str.size();
if(s_size == 0 && p_size == 0)return true;
if(s_size != 0 && p_size == 0)return false;
ok = false;
s = s_str;
p = p_str;
recur(0,0);
return ok;
}
};
注:这是在leetcode上提交的代码,稍加修改即可通过剑指OFFER的OJ