鏈結給你乙個字串 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 ...