Leecode,Regular Expression Matching
#include <iostream>
using namespace std;
//递归 时间复杂度O(n),空间复杂度O(1)
bool solution( const char *s, const char *p)
{
if (*p == '\0') return *s == '\0';
if ( p[1] != '*' )
{
if (*s == *p || (*p == '.' && *s != '\0'))
return solution(s + 1, p + 1);
else
return false;
}
else
{
while (*s == *p || (*p == '.' && *s != '\0'))
{
//* 如果出现0次,继续递归
if (solution(s, p + 2))
return true;
//* 匹配多次
++s;
}
//* 出现0次
return solution(s, p + 2);
}
}
int main()
{
cout << solution("aa", "a") << endl;
cout << solution("aa", "aa") << endl;
cout << solution("aaa", "a") << endl;
cout << solution("aa", "a*") << endl;
cout << solution("aa", ".*") << endl;
cout << solution("aab", "c*a*b") << endl;
cout << solution("mississippi", "mis*is*p*") << endl;
return 0;
}