10. Regular Expression Matching

Given an input string (s) and a pattern (p), 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).

Note:

  • s could be empty and contains only lowercase letters a-z.

  • p could be empty and contains only lowercase letters a-z, and characters like . or *.

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 precedeng element, 'a'. Therefore, by repeating 'a' once, it becomes "aa".

Example 3:

Example 4:

Example 5:

第一個是利用DP的方法,定義一個2D的dp table,dp[i][j]代表s[0...i - 1]和p[0...j - 1]是否match。下方為動態規劃的關係式: 1. dp[i][j] = dp[i - 1][j - 1] if p[j - 1] != '*' and (s[i - 1] == p[j - 1] || p[j - 1] == '.') 2. dp[i][j] = dp[i][j - 2] if p[j - 1] == '*' and the pattern repeats for 0 times 3. dp[i][j] = dp[i - 1][j] if p[j - 1] == '*' and the pattern repeats for at least one times

把i = 0的row先拿出來initialize,這樣後面的code就可以從i = 1開始loop,就不需要再確認i > 0。

Last updated

Was this helpful?