以s="aab",p="c * a * b"來說明整個的過程# 確定dp陣列的第一行,如果遇到了*,只要判斷其對應的前面兩個元素的dp值
# 注意:我們無需判斷p裡面的第乙個值是否為"*",如果為"*",那肯定匹配不到為fasle,原陣列正好是fasle,所以直接從2開始判斷即可
for j in range(2, n):
if p[j-1] == '*':
dp[0][j] = dp[0][j - 2]
for r in range(1, m):
i = r - 1 # 對應s中的元素
for c in range(1, n):
j = c - 1 # 對應p中的元素
if s[i] == p[j] or p[j] == '.':
dp[r][c] = dp[r - 1][c - 1]
elif p[j] == '*':
if p[j - 1] == s[i] or p[j - 1] == '.':
dp[r][c] = dp[r - 1][c] or dp[r][c - 2]
else:
dp[r][c] = dp[r][c - 2]
else:
dp[r][c] = false
return dp[m - 1][n - 1]
''''''
leetcode 動態規劃 鍵盤 正則式
class solution int dp n 1 表示第i次操作後最多能顯示多少個a,次數最多就是複製一次,全部貼上 memset dp,0,sizeof dp int half int sqrt n for int i 2 i n i return dp n 方法1 遞迴 class solut...
Leetcode 正規表示式匹配
給你乙個字串 s 和乙個字元規律 p,請你來實現乙個支援 和 的正規表示式匹配。匹配任意單個字元 匹配零個或多個前面的那乙個元素 所謂匹配,是要涵蓋 整個 字串 s的,而不是部分字串。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例...
leetcode正規表示式匹配
暴力求解 動態規劃,如果p j s i 那麼dp i j dp i 1 j 1 意思就是說,如果p的第j個字元和s的第i個字元匹配上了,那麼dp i j 是否為true取決於dp i 1 j 1 如果p j 那麼p j 此時就可以匹配任意字元,情況就和1一樣了,dp i j dp i 1 j 1 如...