10. 正規表示式匹配
重疊子問題結構
初始化ss的長度ss,pp的長度pp
初始化雜湊表memo=\memo={},鍵為(i,j)(i,j),值為true\ or\ falsetrue or false,表示s[0,...,i]s[0,...,i]和p[0,...,j]p[0,...,j]是否匹配。
定義遞迴函式dp(i,j)dp(i,j),ii為當前ss的匹配位置,jj為pp的匹配位置。
若(i,j)(i,j)出現在memomemo中,表示當前子問題,之前已經處理過,直接返回對應的值,memo[(i,j)]memo[(i,j)]
若j==pj==p,說明pp已經匹配完,若此時ss還有字元未匹配,則返回falsefalse,若ss也匹配完,則返回truetrue。即返回i==si==s
定義prepre表示當前pp和ss的首位是否匹配。條件:i bool:
s=len(s)
p=len(p)
memo={}
def dp(i,j):
if((i,j) in memo):
return memo[(i,j)]
if(j==p):
return i==s
pre=i
if(j<=p-2 and p[j+1]=="*"):
tmp=dp(i,j+2) or pre and dp(i+1,j)
else:
tmp=pre and dp(i+1,j+1)
memo[(i,j)]=tmp
return tmp
return dp(0,0)
leetcode題解 查詢表問題
查詢,是使用計算機處理問題時的乙個最基本的任務,因此也是面試中非常常見的一類問題。很多演算法問題的本質,就是要能夠高效查詢。學會使用系統庫中的map和set,就已經成功了一半。349.intersection of two arrays 時間複雜度 o nlogn 空間複雜度 o n class s...
leetcode題解之相交鍊錶
編寫乙個程式,找到兩個單鏈表相交的起始節點。注意 如果兩個鍊錶沒有交點,返回 null.在返回結果後,兩個鍊錶仍須保持原有的結構。可假定整個鍊錶結構中沒有迴圈。程式盡量滿足 o n 時間複雜度,且僅用 o 1 記憶體。雙指標法演算法說明 兩個鍊錶長度不一定相等,但是拼接在一起以後一定等長。pa和pb...
LeetCode中「排序鍊錶」題解
排序鍊錶 給你鍊錶的頭結點 head 請將其按 公升序 排列並返回 排序後的鍊錶 高階 你可以在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序嗎?示例 1 輸入 head 4 2,1 3 輸出 1,2,3,4 示例 2 輸入 head 1,5,3,4,0 輸出 1 0,3 4,...