算法:正则表达式匹配
生活随笔
收集整理的這篇文章主要介紹了
算法:正则表达式匹配
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
給定一個字符串 (s) 和一個字符模式 (p)。實現支持 '.' 和 '*' 的正則表達式匹配。
'.' 匹配任意單個字符。
'*' 匹配零個或多個前面的元素。
匹配應該覆蓋整個字符串 (s) ,而不是部分字符串。
說明:
s 可能為空,且只包含從 a-z 的小寫字母。
p 可能為空,且只包含從 a-z 的小寫字母,以及字符 . 和 *。
示例 1:
輸入: s = "aa" p = "a" 輸出: false 解釋: "a" 無法匹配 "aa" 整個字符串。
示例 2:
輸入: s = "aa" p = "a*" 輸出: true 解釋: '*' 代表可匹配零個或多個前面的元素, 即可以匹配 'a' 。因此, 重復 'a' 一次, 字符串可變為 "
主要理解動態規劃的過程,對應幾種狀態分別寫出對應動態方程。動態規劃見下面地址。
//正則表達式匹配(動態規劃)//* 表示匹配'零個'或'多個'前面的那一個元素 //通過p來匹配s func isMatch(s string, p string) bool {m, n := len(s), len(p)matches := func(i, j int) bool {if i == 0 {return false}if p[j-1] == '.' {return true}return s[i-1] == p[j-1]}f := make([][]bool, m + 1)for i := 0; i < len(f); i++ {f[i] = make([]bool, n + 1)}f[0][0] = truefor i := 0; i <= m; i++ {for j := 1; j <= n; j++ {if p[j-1] == '*' {f[i][j] = f[i][j] || f[i][j-2]if matches(i, j - 1) {f[i][j] = f[i][j] || f[i-1][j]}} else if matches(i, j) {f[i][j] = f[i][j] || f[i-1][j-1]}}}return f[m][n] }鏈接:https://leetcode-cn.com/problems/regular-expression-matching/solution/zheng-ze-biao-da-shi-pi-pei-by-leetcode-solution/
總結
以上是生活随笔為你收集整理的算法:正则表达式匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 买卖股票的最佳时机|||
- 下一篇: 算法:扰乱字符串