Leetcode 10 比較難的動態規化正則表達式匹配

 

要利用遞推性質,將最後一個表達式優化成如下形式:

轉移方程的推導,轉移方程的化簡 

class Solution {
public:
    bool isMatch(string s, string p) {
        s = ' '+s, p = ' '+p;                   // 最開頭放入一個哨兵,避免邊界
        int n = s.size(), m = p.size();
        vector<vector<bool>> dp(n,vector<bool>(m,false));
        dp[0][0] = true;
        for(int i=0;i<n;i++){
            for(int j=1;j<m;j++){
                if(i&&(s[i]==p[j]||p[j]=='.')) dp[i][j] = dp[i-1][j-1];
                else if(p[j]=='*'){
                dp[i][j] = dp[i][j-2] ||  (i&&dp[i-1][j]&& (s[i]==p[j-1] || p[j-1] == '.')); 
                }
            }
        }
        return dp[n-1][m-1];
    }
};

 

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