Please tell me how to deal with edge case such as `s:"aa", p:"a*"`

in `else if (p[j] == '*')`

branch. One way I know is to increase the size of `dp`

like `vector<vector<bool>> dp(s.size() + 1, vector<bool>(p.size() + 1, false) );`

However, in that case the index of `dp`

will not be the same with the index of `for loop`

.

The problem is as follows:

Given an input string (s) and a pattern (p), implement regular expression matching with support for ‘.’ and ‘*’.

`'.' Matches any single character. '*' Matches zero or more of the preceding element. `

The matching should cover the entire input string (not partial).

Here is the code:

`class Solution { public: bool isMatch(string s, string p) { vector<vector<bool>> dp(s.size(), vector<bool>(p.size(), false) ); dp[0][0] = (s[0] == p[0] ? true : false); for (int i = 1; i < s.size(); i++) { for (int j = 1; j < p.size(); j++) { if (s[i] == p[j] || p[j] == '.') { dp[i][j] = dp[i - 1][j - 1]; } else if (p[j] == '*') { dp[i][j] = dp[i - 1][j] || dp[i][j - 2]; } else if (s[i] != p[j]) { dp[i][j] = false; } } } return dp[s.size() - 1][p.size() - 1]; } }; `