(力扣每日一題)恢復空格

2021-10-07 22:14:31 字數 1255 閱讀 5735

哦,不!你不小心把乙個長篇文章中的空格、標點都刪掉了,並且大寫也弄成了小寫。像句子"i reset the computer. it still didn』t boot!「已經變成了"iresetthecomputeritstilldidntboot」。在處理標點符號和大小寫之前,你得先把它斷成詞語。當然了,你有一本厚厚的詞典dictionary,不過,有些詞沒在詞典裡。假設文章用sentence表示,設計乙個演算法,把文章斷開,要求未識別的字元最少,返回未識別的字元數。

解題思路

動態規劃

1、通過建立於待判定字串等長的陣列做標記

2、從字串的後面往前遍歷,以這個字串為起點,分別判斷dictionary中的元素是否可以與之匹配,並每次更新當前未匹配元素的最小值。如果所有的都不能匹配,就在前面的基礎上加一,並繼續遍歷。

class

solution

:def

respace

(self, dictionary: list[

str]

, sentence:

str)

->

int:

#首先,將dictionary遍歷,求出每乙個元素的長度,以為後面的遍歷節約開銷

d=for i in dictionary:

d[i]

=len

(i)#建立乙個做標記的陣列dp

len_sentence=

len(sentence)

dp=[0

]*(len_sentence+1)

#進入主體部分,開始遍歷

for i in

range

(len_sentence-1,

-1,-

1):#首先,將當前元素的dp值在後乙個元素的基礎上加一,作為未匹配的最壞情況

dp[i]

=dp[i+1]

+1#遍歷字典d

for j in d:

#如果有匹配的值,就更新當前的dp元素

if sentence[i:i+d[j]

]==j:

dp[i]

=min

(dp[i]

,dp[i+d[j]])

#返回結果

return dp[

0]

每日一題 力扣 計畫

98 驗證二叉搜尋樹 問題給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 1.節點的左子樹只包含小於當前節點的數。2.節點的右子樹只包含大於當前節點的數。3.所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 1 3 輸出 true示例2 輸入 5 1 4...

力扣每日一題 6 14

1300 轉變陣列後最接近目標值的陣列和 給你乙個整數陣列 arr 和乙個目標值 target 請你返回乙個整數 value 使得將陣列中所有大於 value 的值變成 value 後,陣列的和最接近 target 最接近表示兩者之差的絕對值最小 如果有多種使得和最接近 target 的方案,請你返...

每日一題力扣48

給定乙個 n n 的二維矩陣 matrix 表示乙個影象。請你將影象順時針旋轉 90 度。你必須在 原地 旋轉影象,這意味著你需要直接修改輸入的二維矩陣。請不要 使用另乙個矩陣來旋轉影象。正解 旋轉90度就是,先鏡面對稱,再轉置即可 class solution defrotate self,mat...