哦,不!你不小心把乙個長篇文章中的空格、標點都刪掉了,並且大寫也弄成了小寫。像句子"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...