Skip to content

Latest commit

 

History

History
40 lines (38 loc) · 1.37 KB

010.md

File metadata and controls

40 lines (38 loc) · 1.37 KB

10. Regular Expression Matching

Solution 1 (O(mn))

// Dynamic programming
class Solution {
    public boolean isMatch(String s, String p) {
        int length1 = s.length(), length2 = p.length();
        boolean ans[][] = new boolean[length1 + 1][length2 + 1];
        ans[0][0] = true;
        for (int i = 1; i <= length1; i++)
            ans[i][0] = false;
        for (int i = 2; i <= length2; i++)
            if (p.charAt(i - 1) == '*')
                ans[0][i] = ans[0][i - 2];
        for (int i = 1; i <= length1; i++) {
            for (int j = 1; j <= length2; j++) {
                if (p.charAt(j - 1) == '*') {
                    if (p.charAt(j - 2) == '.') {
                        ans[i][j] = ans[i][j - 2] | ans[i - 1][j];
                    } else {
                        if (s.charAt(i - 1) != p.charAt(j - 2)) {
                            ans[i][j] = ans[i][j - 2];
                        } else {
                            ans[i][j] = ans[i][j - 2] | ans[i - 1][j];
                        }
                    }
                } else if (p.charAt(j - 1) == '.') {
                    ans[i][j] = ans[i - 1][j - 1];
                } else {
                    ans[i][j] = ans[i - 1][j - 1] &
                        (s.charAt(i - 1) == p.charAt(j - 1));
                }
            }
        }
        return ans[length1][length2];    
    }
}