leetcode10. Regular Expression Matching

難度:hard

題目:

這裏寫圖片描述

AC解:

class Solution {
public:
    bool isMatch(string s, string p) {
        int slen = s.length();
        int plen = p.length();

        if (slen == 0 && plen == 0)
            return true;

        vector<vector<bool>> dp(slen + 1, vector<bool>(plen + 1, false));
        //初始化數組
        dp[0][0] = true;
        //p爲a*a*...此種情況
        for (int i = 2; i <= plen; i += 2) {
            if (dp[0][i - 2] && p[i - 1] == '*')
                dp[0][i] = true;
        }

        for (int i = 1; i < slen + 1; i++)
            for (int j = 1; j < plen + 1; j++) {
                if (s[i - 1] == p[j - 1] || p[j - 1] == '.')
                    dp[i][j] = dp[i - 1][j - 1];
                if (p[j - 1] == '*') {
                    if (s[i - 1] == p[j - 2] || p[j - 2] == '.')
                        //分別爲重複0, 1,多次
                        dp[i][j] = dp[i][j - 2] || dp[i][j - 1] || dp[i - 1][j];
                    else
                        dp[i][j] = dp[i][j - 2];  //s[i - 1] 和 p[j - 2]不相等,重複0次
                }
            }
        return dp[slen][plen];
    }
};
發佈了66 篇原創文章 · 獲贊 21 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章