通配符匹配_leetcode44

 

 

 

 

bool isMatch(char* s, char* p) {
   int m=strlen(s);
   int n=strlen(p);
   int dp[m+1][n+1];
   memset(dp,0,sizeof(dp));
   dp[0][0]=true;
   int i,j;
//对边界问题进行处理
   for(i=1;i<=n;i++)
   {
       if(p[i-1]=='*')
       {
           dp[0][i]=true;
       }
       else
       {
           break;
       }
   }
   for(i=1;i<=m;i++)
   {
       for(j=1;j<=n;j++){
           /*
           if(p[j-1]=='*')     //比较*的情况
           {
               dp[i][j]=dp[i][j-1]|dp[i-1][j];
           }
           else
           */
           if(p[j-1]=='?'||s[i-1]==p[j-1])  //比较?和全字母的情况
           {
               dp[i][j]=dp[i-1][j-1];
           }
           else if(p[j-1]=='*')
           {
               dp[i][j]=dp[i][j-1]|dp[i-1][j];
           }

       }
   }
   return dp[m][n];
}
原文地址:https://www.cnblogs.com/sbb-first-blog/p/13252476.html