python演算法之神奇的詞根(替換詞根)

2021-10-06 19:17:45 字數 1276 閱讀 5734

神奇的詞根

問題:

字典為[「cat」,「bat」,「rat」],句子為"the cattle was ralled by the battery",經過替換,輸出句子為"the cat was by the bat「。

解決:

首先建立兩個字典,並做好初始化工作。在建立字典時我們使用collections.defaultdict()建立乙個預設字典,它本身是乙個字典,只不過python會自動為他的鍵賦乙個初始值。

接下來,以每乙個詞根的首字母為鍵,把每乙個詞根放到鍵所對應的值中去,這裡的值是乙個集合(set),同時記錄下該首字母所對應的詞根的最大長度是多少,這樣一來,之後對比單詞的字首時,只需要看這個最大長度即可。

字典建立好以後,首先把每個單詞拿出來,查詢以單詞開頭的詞根是否能夠和這個單詞匹配,s字典 裡記錄了以某個字母開頭的詞根的最大長度,從第一位開始擷取一直擷取到最大長度,如果發現這個子字串確實是乙個詞根的話,則修改單詞,並結束該輪迴圈。為了方便記錄下表和讀取單詞,使用enumerate()函式來遍歷句子,它會把索引放到第乙個變數,把元素放到第二個變數。

最後通過字串的join方法連線各個單詞即可。

源**:

#神奇的詞根

from collections import defaultdict

defreplacewords

(dict

,sentence)

: d = defaultdict(

set)

s = defaultdict(

int)

sentence = sentence.split(

)for w in

dict

:print

(w[0])

d[w[0]

].add(w)

s[w[0]

]=max(s[w[0]

],len(w)

)for i,w in

enumerate

(sentence)

:for j in

range

(s[w[0]

]):if w[

:j+1

]in d[w[0]

]:sentence[i]

= w[

:j+1

]break

return

' '.join(sentence)

動態規劃之神奇的口袋

有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n 1 n 20 個想要得到的物品,每個物品的體積分別是a1,a2 an。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的...

上帝的傑作系列之 神奇的數

這一次,讓我們體驗數9801的奇妙。1.祂是最大的兩位數的平方,9801 99 99 2.祂是乙個五角形數,什麼是五角形數呢?如圖所示 用通項公式表示,第n個五角形數等於 3.再計算一下9801的倒數 1 9801 0.000102030405060708091011121314151617 似乎很...

Jquery基礎教程之神奇的

這個玩意其實是乙個jquery封裝的功能非常強大的函式,當然,強大的東東,在使用起來也必然會是有點複雜的咯。下面我們來看它的一些強大的用法 expr 這個函式可以通過css選擇器 xpath html 來匹配目標元素,返回的是乙個jquery物件,jquery的所有操作都是以此為基石的。下面來看 h...