classSolution{public:boolisMatch(constchar*s,constchar*p){// Note: The Solution object is instantiated only once and is reused by each test case.
constchar*tmp=p;intcnt=0;while(*tmp!='\0')if(*(tmp++)!='*')cnt++;if(cnt>strlen(s))returnfalse;if(strlen(s)==0){for(inti=0;i<strlen(p);i++){if(p[i]!='*')returnfalse;}returntrue;}int**dp;dp=newint*[strlen(s)+1];for(inti=0;i<=strlen(s);i++){dp[i]=newint[strlen(p)+1];}dp[0][0]=1;inti=0;while(p[i++]=='*')dp[0][i]=1;for(inti=1;i<=strlen(s);i++){for(intj=1;j<=strlen(p);j++){if(dp[i-1][j-1]==1&&(s[i-1]==p[j-1]||p[j-1]=='?')){dp[i][j]=1;}if(p[j-1]=='*'&&(dp[i][j-1]==1||dp[i-1][j-1]==1||dp[i-1][j]==1)){dp[i][j]=1;}}}if(dp[strlen(s)][strlen(p)]==1)returntrue;elsereturnfalse;}};