成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

LeetCode之正則表達(dá)式匹配(Top 100)

開發(fā) 前端
已知一個字符串 s 和一個字符規(guī)律 p,請你來實(shí)現(xiàn)一個支持 '.' 和 '*' 的正則表達(dá)式匹配。所謂匹配,是要涵蓋 整個 字符串 s 的,而不是部分字符串。

[[438356]]

前言

本題為 LeetCode 前 100 高頻題

我們社區(qū)陸續(xù)會將顧毅(Netflix 增長黑客,《iOS 面試之道》作者,ACE 職業(yè)健身教練。微博:@故胤道長[1])的 Swift 算法題題解整理為文字版以方便大家學(xué)習(xí)與閱讀。

LeetCode 算法到目前我們已經(jīng)更新了 9 期,我們會保持更新時間和進(jìn)度(周一、周三、周五早上 9:00 發(fā)布),每期的內(nèi)容不多,我們希望大家可以在上班路上閱讀,長久積累會有很大提升。

不積跬步,無以至千里;不積小流,無以成江海,Swift社區(qū) 伴你前行。

難度水平:困難

1. 描述

已知一個字符串 s 和一個字符規(guī)律 p,請你來實(shí)現(xiàn)一個支持 '.' 和 '*' 的正則表達(dá)式匹配。

  • '.' 匹配任意單個字符
  • '*' 匹配零個或多個前面的那一個元素

所謂匹配,是要涵蓋 整個 字符串 s 的,而不是部分字符串。

2. 示例

示例 1

  1. 輸入:s = "aa" p = "a" 
  2. 輸出:false 
  3. 解釋:"a" 無法匹配 "aa" 整個字符串。 

示例 2

  1. 輸入:s = "aa" p = "a*" 
  2. 輸出:true 
  3. 解釋:因?yàn)?nbsp;'*' 代表可以匹配零個或多個前面的那一個元素, 在這里前面的元素就是 'a'。因此,字符串 "aa" 可被視為 'a' 重復(fù)了一次。 

示例 3

  1. 輸入:s = "ab" p = ".*" 
  2. 輸出:true 
  3. 解釋:".*" 表示可匹配零個或多個('*')任意字符('.')。 

示例 4

  1. 輸入:s = "aab" p = "c*a*b" 
  2. 輸出:true 
  3. 解釋:因?yàn)?nbsp;'*' 表示零個或多個,這里 'c' 為 0 個, 'a' 被重復(fù)一次。因此可以匹配字符串 "aab"。 

示例 5

  1. 輸入:s = "mississippi" p = "mis*is*p*." 
  2. 輸出:false 

約束條件:

  • 1 <= s.length <= 20
  • 1 <= p.length <= 30
  • s 可能為空,且只包含從 a-z 的小寫字母。
  • p 可能為空,且只包含從 a-z 的小寫字母,以及字符 . 和 *。
  • 保證每次出現(xiàn)字符 * 時,前面都匹配到有效的字符

3. 答案

  1. class RegularExpressionMatching { 
  2.     func isMatch(_ s: String, _ p: String) -> Bool { 
  3.         let sChars = Array(s), pChars = Array(p) 
  4.         var dp = Array(repeating: Array(repeating: falsecount: pChars.count + 1), count: sChars.count + 1) 
  5.         dp[0][0] = true 
  6.          
  7.         for i in 0...pChars.count { 
  8.          // jump over "" vs. "x*" case 
  9.             dp[0][i] = i == 0 || i > 1 && dp[0][i - 2] && pChars[i - 1] == "*" 
  10.         } 
  11.          
  12.         for i in 0...sChars.count { 
  13.             for j in 0...pChars.count { 
  14.                 guard j > 0 else { 
  15.                     continue 
  16.                 } 
  17.                  
  18.                 let pCurrent = pChars[j - 1] 
  19.                  
  20.                 if pCurrent != "*" { 
  21.                     dp[i][j] = i > 0 && dp[i - 1][j - 1] && (pCurrent == "." || pCurrent == sChars[i - 1]) 
  22.                 } else { 
  23.                     dp[i][j] = dp[i][j - 2] || i > 0 && j > 1 && (sChars[i - 1] == pChars[j - 2] || pChars[j - 2] == ".") && dp[i - 1][j] 
  24.                 } 
  25.             } 
  26.         } 
  27.          
  28.         return dp[sChars.count][pChars.count
  29.     } 
  • 主要思想:經(jīng)典二維動態(tài)規(guī)劃
  • 時間復(fù)雜度: O(mn)
  • 空間復(fù)雜度: O(mn)

該算法題解的倉庫:LeetCode-Swift[2]

前往 LeetCode[3] 練習(xí)

參考資料

[1]@故胤道長: https://m.weibo.cn/u/1827884772

[2]LeetCode-Swift: https://github.com/soapyigu/LeetCode-Swift

[3]LeetCode: https://leetcode.com/problems/regular-expression-matching

 

責(zé)任編輯:姜華 來源: Swift社區(qū)
相關(guān)推薦

2009-08-20 14:26:51

C#正則表達(dá)式

2009-09-16 16:22:04

正則表達(dá)式匹配

2017-05-12 10:47:45

Linux正則表達(dá)式程序基礎(chǔ)

2012-04-28 15:22:46

PHP

2009-09-16 18:08:14

正則表達(dá)式匹配單詞

2009-06-08 16:49:05

Java正則表達(dá)式group

2020-09-04 09:16:04

Python正則表達(dá)式虛擬機(jī)

2018-09-27 15:25:08

正則表達(dá)式前端

2009-09-16 13:24:30

PHP正則表達(dá)式匹配

2009-09-16 16:48:03

正則表達(dá)式匹配數(shù)字

2010-03-04 15:20:20

Ubuntu Patt

2010-03-15 16:21:28

Python正則表達(dá)式

2009-08-20 13:38:58

C#正則表達(dá)式

2024-09-14 09:18:14

Python正則表達(dá)式

2009-09-16 13:53:17

PHP正則表達(dá)式匹配

2009-09-16 17:38:49

正則表達(dá)式匹配任意字符

2010-07-21 10:43:25

Perl正則表達(dá)式匹配

2009-06-10 13:51:25

Java正則表達(dá)式匹配替換

2009-09-16 17:02:15

正則表達(dá)式匹配字符串

2010-03-10 18:57:53

Python正則表達(dá)式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 色偷偷噜噜噜亚洲男人 | 日本黄色片免费在线观看 | 成人av网站在线观看 | 最新国产精品精品视频 | 欧美日韩成人网 | 中文字幕国产 | 人人cao | 久久久久久久久久久久久久久久久久久久 | 欧美黄色一区 | 久久精品一区二区三区四区 | 日韩视频成人 | 98久久| 一区在线播放 | 欧美日韩精品中文字幕 | 色在线免费| 国产成人jvid在线播放 | 精品日韩在线观看 | 九色视频网站 | 国产午夜在线 | 亚洲精品一区二区在线 | 久久亚洲一区二区三区四区 | 精品国产一区二区国模嫣然 | 蜜桃视频一区二区三区 | 99热精品国产 | 日韩一二三区视频 | 在线观看日本网站 | 成人永久免费视频 | 欧美日韩综合精品 | 神马久久久久久久久久 | 中文字幕乱码一区二区三区 | 日韩不卡一区二区三区 | 欧美久久久久久久久 | 日韩久久精品 | 国产 欧美 日韩 一区 | 男人阁久久 | 亚洲一区二区中文字幕在线观看 | 国产电影一区二区三区爱妃记 | 欧洲国产精品视频 | 国产精品久久一区二区三区 | 国产精品一区二区三区在线 | 一区二区三区欧美在线 |