class Solution {
public:
bool isMatch(const char *s, const char *p) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int s_size;
int p_size;
for (s_size = 0; *(s + s_size); ++s_size) ;
for (p_size = 0; *(p + p_size); ++p_size) ;
vector<vector<int> > record;
for (int i = 0; i <= s_size; ++i) {
record.push_back(vector<int>(p_size + 1, -1));
}
for (int i = 0; i <= s_size; ++i) {
record[i][0] = 0;
}
record[0][0] = 0;
for (int i = 0; i <= s_size; ++i) {
for (int j = 1; j <= p_size; ++j) {
if (*(p+j-1) == '*') {
if (record[i][j-1] > 0) {
record[i][j] = record[i][j-1];
}
if (i > 0 && record[i-1][j-1] > 0 && (*(p+j-2) == '.' || *(p+j-2) == *(s+i-1))) {
record[i][j] = record[i-1][j-1] + 1;
}
} else if (*(p+j-1) == '.') {
if (i > 0 && record[i-1][j-1] > -1) {
record[i][j] = record[i-1][j-1] + 1;
}
} else {
if (i > 0 && record[i-1][j-1] > -1 && *(p+j-1) == *(s+i-1)) {
record[i][j] = record[i-1][j-1] + 1;
}
}
}
}
return record[s_size][p_size] == s_size;
}
};
public:
bool isMatch(const char *s, const char *p) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int s_size;
int p_size;
for (s_size = 0; *(s + s_size); ++s_size) ;
for (p_size = 0; *(p + p_size); ++p_size) ;
vector<vector<int> > record;
for (int i = 0; i <= s_size; ++i) {
record.push_back(vector<int>(p_size + 1, -1));
}
for (int i = 0; i <= s_size; ++i) {
record[i][0] = 0;
}
record[0][0] = 0;
for (int i = 0; i <= s_size; ++i) {
for (int j = 1; j <= p_size; ++j) {
if (*(p+j-1) == '*') {
if (record[i][j-1] > 0) {
record[i][j] = record[i][j-1];
}
if (i > 0 && record[i-1][j-1] > 0 && (*(p+j-2) == '.' || *(p+j-2) == *(s+i-1))) {
record[i][j] = record[i-1][j-1] + 1;
}
} else if (*(p+j-1) == '.') {
if (i > 0 && record[i-1][j-1] > -1) {
record[i][j] = record[i-1][j-1] + 1;
}
} else {
if (i > 0 && record[i-1][j-1] > -1 && *(p+j-1) == *(s+i-1)) {
record[i][j] = record[i-1][j-1] + 1;
}
}
}
}
return record[s_size][p_size] == s_size;
}
};