Skip to main content

10. Regular Expression Matching

實現簡化版 Regex,只支援 . *

用內置 library 可以 AC,笑死

Regex 通常是用 FSM (Finite State Machine) 或者 NFA (Nondeterministic Finite Automaton)

但解這題不需要,不要做得太複雜


Recursion + DP


兩個 pointer i, j

i 指住 string s

j 指住 pattern p


Case 1: char / .

直接 == match


Case 2: 後面有 star

  • Match,i 向右一格 -> (i + 1, j)

  • Not match,i 不動,j + 2 跳兩格 -> (i, j + 2)


DFS 每一條分支


考慮 test case

string = "aaa"
pattern = "a*b*a"
output = true

Match (aa)()(a)

2 個 a,0 個 b,1 個 a


DP 的部分

每次選擇分支會縮減問題

消耗 string 和 pattern,變成子問題

這些子問題都是獨立的


("aaa", "a*b*a") 需要解下面這些子問題:

  • ("aaa", "b*a")
  • ("aa", "a*b*a")
  • ("aa", "b*a")
  • ("a", "a*b*a")
  • ("a", "b*a")
  • ("a", "a")