10 正規表示式匹配 困難

2021-10-01 11:03:46 字數 1478 閱讀 3910

鏈結給你乙個字串 s 和乙個字元規律 p,請你來實現乙個支援 『.』 和 『*』 的正規表示式匹配。

『.』 匹配任意單個字元

『*』 匹配零個或多個前面的那乙個元素

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

說明:s 可能為空,且只包含從 a-z 的小寫字母。

p 可能為空,且只包含從 a-z 的小寫字母,以及字元 . 和 *。

class

solution

if(s.

length()

==0&& p.

length()

==0)char

chars = s.

tochararray()

;char

charp = p.

tochararray()

;return

ismatchcore

(chars,charp,0,

0);}

private

boolean

ismatchcore

(char

s,char

p,int si,

int pi)

if(pi == p.length)

//如果模式串中下乙個是'*'

if(pi < p.length-

1&& p[pi+1]

=='*'

)else

}//此時模式串中要麼沒有下乙個,即來到末尾;要麼下乙個不是'*'

if(si != s.length &&

(s[si]

== p[pi]

|| p[pi]

=='.'))

return

false;}

}

dp[i][j] 的含義:s中的前 i 個能否被 p 中的前 j 個匹配(i,j都從1開始計數)、

參考**中的注釋

class

solution

int m = s.

length()

;int n = p.

length()

;boolean

dp =

newboolean

[m+1

][n+1]

;//dp[i][j]:s中前i個(從1開始)字元能否被p中前j個字元匹配

dp[0]

[0]=

true

;for

(int j =

0; j < n ;j++)}

for(

int i =

0; i < m;i++

)// 2. 如果p中當前字元是'*'

if(p.

charat

(j)==

'*')

else}}

}return dp[m]

[n];

}}

LeetCode 10 正規表示式匹配 困難

給你乙個字串 s 和乙個字元規律 p,請你來實現乙個支援 和 的正規表示式匹配。匹配任意單個字元 匹配零個或多個前面的那乙個元素 所謂匹配,是要涵蓋 整個 字串 s的,而不是部分字串。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例...

力扣 困難 10 正規表示式匹配

給你乙個字串 s 和乙個字元規律 p,請你來實現乙個支援 和 的正規表示式匹配。匹配任意單個字元 匹配零個或多個前面的那乙個元素 所謂匹配,是要涵蓋 整個 字串 s的,而不是部分字串。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例...

LeetCode 10 正規表示式匹配(困難)

給你乙個字串s和乙個字元規律p,請你來實現乙個支援 和 的正規表示式匹配。匹配任意單個字元 匹配零個或多個前面的那乙個元素所謂匹配,是要涵蓋整個字串s的,而不是部分字串。說明 s可能為空,且只包含從a z的小寫字母。p可能為空,且只包含從a z的小寫字母,以及字元.和 示例 1 輸入 s aa p ...