- 每次从p中拿出一个字符来与s中的字符进行匹配
- 如果该字符后续的字符不是*,那么直接与s中对应字符进行匹配判断即可, 如果匹配上了,那么就将两个游标都往后移动一位。
- 如果后续字符是*,分成两种独立的情况,两种情况有一个能正确匹配即可
1.一种是匹配0个,那么只需要跳过p中的这两个字符( p=p.substr(2) ),继续与s中的字符进行比较即可,2.如果是匹配多个,那么将s中的游标往后移动一个,继续进行判断,
using namespace std;
class Solution {
public:
using namespace std;
class Solution {
public:
bool isMatch(string s, string p) {
if (p.empty()) return s.empty();
auto first_match = !s.empty() && (s[0] == p[0] || p[0] == '.');
if (p.size() >= 2 && p[1] == '*') {
bool jump = isMatch(s, p.substr(2));//跳过的情况,第一个字符可以不匹配
bool godown = first_match && isMatch(s.substr(1), p)
return jump || godown ;
} else {
return first_match && isMatch(s.substr(1), p.substr(1));//pos的默认值是0,len的默认值是s.size() - pos
}
}
};
int main()
{
printf("--->");
unique_ptr<Solution> mysolo = unique_ptr<Solution>(new Solution());
string s="aa"; string p="a*";
int res = mysolo->isMatch(s,p);
cout<< res<< endl;
return 0;
}