LeetCode-10 正則表達式匹配

  • C++
    class Solution {
    public:
        bool isMatch(string s, string p) {
            int sl = s.length();
            int pl = p.length();
            bool** dp = new bool*[sl + 1];
            for(int i=0;i<=sl;i++){
                dp[i] = new bool[pl + 1]{false};
            }
            dp[0][0] = true;
            for(int i=1;i<=pl;i++){
                if(p[i-1]=='*'){
                    dp[0][i] = dp[0][i-2];
                }else{
                    dp[0][i] = false;
                }
            }
            for(int i=1;i<=sl;i++){
                for(int j=1;j<=pl;j++){
                    if(s[i-1]==p[j-1]||p[j-1]=='.'){
                        dp[i][j] = dp[i-1][j-1];
                    }else if(p[j-1]=='*'){
                        if(s[i-1]==p[j-2]||p[j-2]=='.'){
                            dp[i][j] = dp[i][j-1] || dp[i-1][j] || dp[i][j-2];
                        }else{
                            dp[i][j] = dp[i][j-2];
                        }
                    }
                }
            }
            bool result = dp[sl][pl];
            for(int i=0;i<=sl;i++){
                delete[] dp[i];
            }
            delete[] dp;
            return result;
        }
    };

     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章