正则表达式匹配
Regular Expression Matching
题目详情
问题:正则表达式匹配
考察:字符串、动态规划、递归
来源:Citadel
链接:https://www.jointaro.com/interviews/questions/regular-expression-matching/
Given an input string s and a pattern p, implement regular expression matching with support for '.' and '*' where:
'.'Matches any single character.'*'Matches zero or more of the preceding element.
The matching should cover the entire input string (not partial).
Example 1:
Input: s = "aa", p = "a" Output: false Explanation: "a" does not match the entire string "aa".
Example 2:
Input: s = "aa", p = "a*" Output: true Explanation: '*' means zero or more of the preceding element, 'a'. Therefore, by repeating 'a' once, it becomes "aa".
Example 3:
Input: s = "ab", p = ".*" Output: true Explanation: ".*" means "zero or more (*) of any character (.)".
Constraints:
1 <= s.length <= 201 <= p.length <= 20scontains only lowercase English letters.pcontains only lowercase English letters,'.', and'*'.- It is guaranteed for each appearance of the character
'*', there will be a previous valid character to match.
解析
思路:二维 DP,dp[i][j] 表示 s 前 i 个字符能否匹配 p 前 j 个字符。普通字符和 . 直接匹配前一状态;遇到 * 时可表示零个前字符,或在当前字符匹配时继续消费 s。
复杂度:时间 O(mn),空间 O(mn)。