bool isMatch(char* s, char* p) {
if(s[0] == 0)
{
if(p[0] == 0)return true;
if(p[0] != 0 && p[1] == '*')return isMatch(s,p+2);
return false;
}
if(p[0] == 0)return false;
if(p[1] == '*')
{
if(p[0] == s[0]||p[0] == '.')return (isMatch(s+1,p) || isMatch(s,p+2));
else return isMatch(s,p+2);
}
if(p[0] == s[0] || p[0] =='.')
{
return isMatch(s+1,p+1);
}
return false;
}
bool isMatch(char* s, char* p) {
int s_len = strlen(s);
int p_len = strlen(p);
bool **f = (bool**)malloc(sizeof(bool*)*(s_len+1));
for (int i = 0; i <= s_len; ++i)
f[i] = (bool*)malloc(sizeof(bool)*(p_len+1));
f[0][0] = true;
for (int i = 1; i <= s_len; ++i)
f[i][0] = false;
for (int i = 1; i <= p_len; ++i)
f[0][i] = i > 1 && f[0][i-2] == true && p[i - 1] == '*';
for (int i = 1; i <= s_len; ++i)
for (int j = 1; j <= p_len; ++j)
if (p[j-1] != '*')
f[i][j] = f[i-1][j-1] == true && (s[i-1] == p[j-1] || p[j-1] == '.');
else
f[i][j] = f[i][j-2] == true || (s[i-1] == p[j-2] || p[j-2] == '.') && f[i-1][j] == true;
bool result = f[s_len][p_len];
for (int i = 0; i <= s_len; ++i)
free(f[i]);
free(f);
return result;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步