题意:
        请实现一个函数用来匹配包括'.'和'*'的正则表达式。
        模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 
        在本题中,匹配是指字符串的所有字符匹配整个模式。
        例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。

方法:
动态规划

思路:
        dp[i][j]表示str的前i个字符与pattern的前j个字符是否匹配。

        状态转移方程如下:
            

        

class Solution {
public:
    int dp[35][35]={0};//dp[i][j]表示str的前i个字符与pattern的前j个字符是否匹配
    bool match(string str, string pattern) {
        int len1=str.size();
        int len2=pattern.size();
        dp[0][0]=1;//初始化
        
        //i==0是处理空str串,非空pattern串的情况
        for(int i=0;i<=len1;i++){
            for(int j=1;j<=len2;j++){
                 if(pattern[j-1]=='*'){//如果模式串字符为*
                     if(i>0&&(str[i-1]==pattern[j-2]||pattern[j-2]=='.'))
                         dp[i][j]|=dp[i-1][j];//至少1次
                     if(j>=2){
                         dp[i][j]|=dp[i][j-2];//0次
                     }
                 }else if(pattern[j-1]=='.'){//如果模式串字符为.,则dp[i][j]=dp[i-1][j-1]
                     if(i>0)
                         dp[i][j]=dp[i-1][j-1];
                  }else{
                     if(i>0&&str[i-1]==pattern[j-1]){//如果模式串字符与str字符匹配,则dp[i][j]=dp[i-1][j-1]
                         dp[i][j]=dp[i-1][j-1];
                     }
                 }
            }
        }
        return dp[len1][len2]==1;
    }
};


时间复杂度:
空间复杂度: