LeetCode #10: Regular Expression Matching
2016-09-04 12:45
387 查看
Problem Statement
(Source) Implement regular expression matching with support for'.'and
'*'.
'.' Matches any single character. '*' Matches zero or more of the preceding element. The matching should cover the entire input string (not partial). The function prototype should be: bool isMatch(const char *s, const char *p) Some examples: isMatch("aa","a") → false isMatch("aa","aa") → true isMatch("aaa","aa") → false isMatch("aa", "a*") → true isMatch("aa", ".*") → true isMatch("ab", ".*") → true isMatch("aab", "c*a*b") → true
Analysis
dp[i][j]: the matching result of
s[:i]and
p[:j].
Time Complexity: O(mn)
Space Complexity: O(mn)
where m and n are the length of s and p respectively.
Tags:
Dynamic Programming.
Solution
class Solution(object): def isMatch(self, s, p): """ :type s: str :type p: str :rtype: bool """ m, n = len(s), len(p) dp = [[False for j in xrange(n + 1)] for i in xrange(m + 1)] dp[0][0] = True # Assume valid RE doesn't have '*' as the first character. for j in xrange(1, n + 1): if p[j - 1] == '*': dp[0][j] = dp[0][j - 1] if j > 1: dp[0][j] = (dp[0][j] or dp[0][j - 2]) # If string is empty, then try to match p with empty string. if m == 0: return dp[0] # Fill in the dp matrix. for i in xrange(0, m + 1): for j in xrange(1, n + 1): if p[j - 1] == '.' or p[j - 1] == s[i - 1]: dp[i][j] = dp[i - 1][j - 1] elif p[j - 1] == '*': if dp[i][j - 2]: dp[i][j] = True elif dp[i - 1][j] and (s[i - 1] == p[j - 2] or p[j - 2] == '.'): dp[i][j] = True return dp[m]
References
(1) http://bangbingsyb.blogspot.com.au/2014/11/leetcode-regular-expression-matching.html(2) http://articles.leetcode.com/regular-expression-matching
相关文章推荐
- LeetCode #10 Regular Expression Matching
- Leetcode #10 Regular Expression Matching 正则表达式匹配 解题小节
- LeetCode #10 - Regular Expression Matching
- LeetCode #10 Regular Expression Matching (H)
- Leetcode 10. Regular Expression Matching
- LeetCode 10 Regular Expression Matching
- 【Leetcode 10】Regular Expression Matching
- [LeetCode] Regular Expression Matching
- Leetcode题解---Regular Expression Matching Java实现
- <10>——Regular Expression Matching
- leetcode10:Regular Expression Matching
- LeetCode: Regular Expression Matching
- Regular Expression Matching -- LeetCode
- 【LeetCode】Wildcard Matching && Regular Expression Matching
- Regular Expression Matching
- Regular Expression Matching
- Regular Expression Matching
- LeetCode-Regular Expression Matching
- LeetCode Regular Expression Matching
- Regular Expression Matching