力扣刷题记录6.1-----10. 正则表达式匹配

目录

  • 一、题目
  • 二、代码
  • 三、运行结果


一、题目

力扣刷题记录6.1-----10. 正则表达式匹配_第1张图片
力扣刷题记录6.1-----10. 正则表达式匹配_第2张图片

二、代码

//dp  i  j   表示从s 取i个  和从p  取j个
// 核心是分成  直接相等和星号相等
class Solution 
{
public:
    bool isMatch(string s, string p) 
    {
       int i,j;
       int s_length=s.size();
       int p_length=p.size();
       vector<vector<int>> dp(s.size()+1,vector<int>(p.size()+1,0));
       dp[0][0]=1;
       for(i=1;i<=p.size();i++)
       {
           if(p[i]=='*') dp[0][i+1]=dp[0][i-1];
       }
       for(i=1;i<=s.size();i++)
       {
           for(j=1;j<=p.size();j++)
           {
               //直接相等  
               if(p[j-1]==s[i-1]||p[j-1]=='.') dp[i][j]=dp[i-1][j-1];

               //为*号
               if(p[j-1]=='*')
               {
                    //*下的相等  匹配0次  匹配1次  匹配>=2次
                    if(p[j-2]==s[i-1]||p[j-2]=='.')
                    {
                        dp[i][j]=(dp[i][j-2]||dp[i-1][j-1]||dp[i-1][j]);

                    } 
                    else
                    {
                        dp[i][j]=dp[i][j-2];
                    }
                    //*下的不等 删除
                    

               }
           }
       }

        return dp[s.size()][p.size()];
    }
    


};

三、运行结果

力扣刷题记录6.1-----10. 正则表达式匹配_第3张图片

你可能感兴趣的:(leetcode,算法,动态规划)