LeetCode 140高效通關(guān):三種解法對(duì)比與避坑指南
def backtrack(start, path):
if start == len(s):
result.append(' '.join(path))
return
for end in range(start+1, len(s)+1):
word = s[start:end]
if word in wordDict:
backtrack(end, path + [word])
memo = {} def backtrack(start):
if start in memo:
return memo[start]
memo[start] = results
return results
memo = {}
def dfs(start):
if start in memo:
return memo[start]
if start == len(s):
return [""]
results = []
for word in wordDict:
if s.startswith(word, start):
sub_results = dfs(start + len(word))
for res in sub_results:
results.append(word + (" " + res if res else ""))
memo[start] = results
return results
def wordBreakDP(s, wordDict):
dp = [[] for _ in range(len(s)+1)]
dp[-1] = [""]
for i in range(len(s)-1, -1, -1):
for word in wordDict:
if i + len(word) <= len(s) and s.startswith(word, i):
for sentence in dp[i + len(word)]:
dp[i].append(word + (" " + sentence if sentence else ""))
return dp[0]
5. 登頂后的全景觀測(cè)臺(tái)
站在解法之巔的觀測(cè)平臺(tái),腳下蜿蜒著三條解法路線:暴力回溯的荊棘小徑泛著紅光,記憶化優(yōu)化的藍(lán)光棧道在中段盤旋,動(dòng)態(tài)規(guī)劃的金色天梯筆直貫通山體。處理"aaaaab"這個(gè)案例時(shí),三種解法呈現(xiàn)不同景象——回溯路線在第五個(gè)"a"處突然塌陷成萬(wàn)丈深淵,記憶化路徑在此架起藍(lán)色光橋,而DP天梯早已在巖層中預(yù)埋好鋼筋骨架。
5.1 不同解法路線的風(fēng)景對(duì)比
暴力回溯法在短字符串處理時(shí)展現(xiàn)出野花遍地的原始美感,輸入"catdog"時(shí)遞歸樹只有兩個(gè)分叉。但當(dāng)遭遇含25個(gè)重復(fù)字符的測(cè)試案例,這片原始森林就會(huì)變成吞噬計(jì)算資源的無(wú)底洞。記憶化版本像是給森林裝上導(dǎo)航燈塔,在"aaaaa"的處理中,重復(fù)子問(wèn)題被標(biāo)記為熒光蘑菇集群,引導(dǎo)后續(xù)探索者快速穿越。
動(dòng)態(tài)規(guī)劃路線自帶工程機(jī)械的轟鳴聲,處理"helloWorld"時(shí)從右向左逐段修筑的解法公路平坦但略顯呆板。當(dāng)字典中存在"hel"和"hell"時(shí),兩條分支在第四個(gè)字符處交匯的景象,就像立交橋的多層匝道在空中編織幾何圖案。時(shí)間復(fù)雜度同為O(n^2),但DP的空間占用總是規(guī)整如集裝箱碼頭,而記憶化版本更像山間散落的臨時(shí)營(yíng)地。
5.2 調(diào)試望遠(yuǎn)鏡:常見(jiàn)報(bào)錯(cuò)排查指南
在拼接"catsandog"的分割結(jié)果時(shí),發(fā)現(xiàn)記憶化緩存返回了幽靈空格。調(diào)試發(fā)現(xiàn)是基礎(chǔ)案例處理不當(dāng)——當(dāng)遞歸到達(dá)字符串末尾時(shí),應(yīng)該返回包含空字符串的列表而非空列表。這個(gè)錯(cuò)誤就像望遠(yuǎn)鏡鏡片上的霧氣,使得最終結(jié)果缺失最后一個(gè)單詞間的空隙。
棧溢出警報(bào)常在山腰處響起,特別是處理超長(zhǎng)輸入時(shí)。將遞歸改為顯式棧管理后,就像給望遠(yuǎn)鏡加裝減震支架。遇到"aabb..."型輸入時(shí),未優(yōu)化的緩存鍵設(shè)計(jì)會(huì)導(dǎo)致內(nèi)存爆炸,此時(shí)給字典鍵加上當(dāng)前字符位置,相當(dāng)于調(diào)節(jié)望遠(yuǎn)鏡的焦距旋鈕,讓模糊的重影變得清晰銳利。
5.3 遠(yuǎn)征補(bǔ)給包:延伸練習(xí)題單
繼續(xù)深入單詞分割領(lǐng)域,推薦嘗試LeetCode 472(連接詞),這道題像在現(xiàn)有解法基礎(chǔ)上加裝多級(jí)火箭推進(jìn)器。需要先完成單詞拆分再驗(yàn)證連接詞,就像用已經(jīng)建好的登山路線探查隱藏洞穴。
進(jìn)階挑戰(zhàn)可以攀登LeetCode 139(單詞拆分)的簡(jiǎn)化版山峰,那里不需要收集具體路徑只需判斷可行性,相當(dāng)于把重型裝備換成輕量化登山杖。對(duì)于渴望探索解法變體的勇者,LeetCode 472(連接詞)和LeetCode 648(單詞替換)構(gòu)成雙子峰,考驗(yàn)如何將單詞拆分技術(shù)應(yīng)用于更復(fù)雜的語(yǔ)義地形。
掃描二維碼推送至手機(jī)訪問(wèn)。
版權(quán)聲明:本文由皇冠云發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。