天天看點

JZ19 正規表達式比對

class Solution {
public:
    /**
     * 代碼中的類名、方法名、參數名已經指定,請勿修改,直接傳回方法規定的值即可
     *
     * 
     * @param str string字元串 
     * @param pattern string字元串 
     * @return bool布爾型
     */
    bool match(string a, string b) {
        // write code here
        int n = a.size();
        int m = b.size();
        a = " " + a;
        b = " " + b;
        int f[1010][1010];
        memset(f, 0, sizeof f);
        f[0][0] =1;
        for (int i = 0; i <= n ;i ++) {
            for (int j = 1; j <= m; j ++) {
                if (j + 1 <= m && b[j + 1] == '*') continue;
                if (i >= 1 && b[j] != '*') {
                    f[i][j] |= f[i - 1][j - 1] 
                        && (a[i] == b[j] || b[j] == '.');
                }
                else if (b[j] == '*') {
                    f[i][j] = ((j - 2 >= 0 && f[i][j - 2]) || 
                              (f[i - 1][j] && (a[i] == b[j - 1] ||
                                        b[j - 1] == '.')));
                }
            }
        }
        return f[n][m];
    }
};