DP algorithm
The time is too long which can still be optimized
class Solution {
public:
bool isMatch(string s, string p) {
if(p=="*")
return true;
if(p.empty()&&!s.empty())
return false;
if(s.empty()&&!p.empty())
return false;
int slen=s.length(),plen=p.length();
vector<bool> temp(plen);
vector<vector<bool> > dp;
for(int i=0;i<=slen;i++)
dp.push_back(temp);
dp[0][0]=1;
for(int i=1;i<=slen;i++)
dp[i][0]=0;
for(int i=1;i<=plen;i++)
dp[0][i]=dp[0][i-1]&&p[i-1]=='*';
for(int i=1;i<=slen;i++)
{
for(int j=1;j<=plen;j++)
{
//let the * match more than 1 characters or let the * match empty string
if(p[j-1]=='*')
dp[i][j]=dp[i-1][j]||dp[i][j-1];
else
dp[i][j]=dp[i-1][j-1]&&(s[i-1]==p[j-1]||p[j-1]=='?');
}
}
if(dp[slen][plen])
return true;
else
return false;
}
};