2021-11-17刷題

今天的題目上難度了,是困難難度的動(dòng)態(tài)規(guī)劃

標(biāo)簽:動(dòng)態(tài)規(guī)劃、位運(yùn)算

劍指 Offer 19. 正則表達(dá)式匹配

這個(gè)題給題意轉(zhuǎn)換一下就是字符串匹配,而字符串匹配我們能想到滑動(dòng)窗口、KMP算法;KMP算法其實(shí)也算是動(dòng)態(tài)規(guī)劃;這個(gè)題其實(shí)也是需要用動(dòng)態(tài)規(guī)劃的思想去解決的

說(shuō)明boolean[][]?dp?=?new?boolean[s.len+1][p.len+1] dp[i][j]=true表示s[i-1]與p[j-1]匹配

題干給出p字符串比s字符串多'.' '*'這兩種字符。'.'很好處理,因?yàn)樗槐硎疽粋€(gè)能任意匹配的字符;'*'的情況就復(fù)雜的多了,它需要與前一個(gè)字符搭配使用能表示0個(gè)或多個(gè)字符,因此我們根據(jù)p[j]是否為*來(lái)

分情況討論:

當(dāng)p[j] == '*'時(shí):

1. s從0到i與p從0到j(luò)-2匹配,即p[j-1]p[j]代表0:dp[i][j-2]==true && p[j]=='*'

2. s從0到i-1與p從0到j(luò)匹配且s[i] == p[j-1]:dp[i-1][j]==true && (s[i-1] == p[j-2] || p[j-2] == '.')

當(dāng)p[j] != '*'時(shí)

1. s從0到i-2與p從0到j(luò)-2匹配且 s[i-1]==p[i-1]匹配:dp[i-1][j-1] == true && (s[i-1]==p[j-1] || p[j-1]=='.')

初始化

動(dòng)態(tài)規(guī)劃dp表的初始化dp[0][0]=true,對(duì)s[0]時(shí)需要對(duì)p[2k]=='*'? (k=1,2,3...)做初始化

318. 最大單詞長(zhǎng)度乘積

直觀解法就是暴力搜索,使用hashSet存儲(chǔ)每個(gè)word的字符,再逐字符查詢(xún)isContain()。word與word之間的比較一定是n^2的時(shí)間復(fù)雜度,所以?xún)?yōu)化的關(guān)鍵點(diǎn)就在將word轉(zhuǎn)換成26位長(zhǎng)的表示改位的字符是否存在的數(shù)字(題干給出只存在小寫(xiě)字母)。思路如果沒(méi)見(jiàn)過(guò)的話,比較難想到

判斷 兩個(gè)對(duì)象是否相等 -> hash -> 很多情況下hash可以用數(shù)組代替 -> 位運(yùn)算,與或非

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容