字典樹 472 連線詞 PYTHON

2021-10-02 22:47:32 字數 2748 閱讀 4936

)#將單詞按照長度排序

s =set(words)

#放入集合中,可以去重

ans =

while words:

word = words.pop(-1

)#從長度最長的元素開始逐一取出

s.remove(word)

#從集合中去除該單詞,因為是從最長的單詞開始判斷,所以不會存在短單詞是由長單詞組成的情況。

l =len(word)

stack =[0

]while stack:

p = stack.pop(0)

#取出棧中第一項

flag =

false

for i in

range

(p+1

,l+1):

#限制字元長度不可超過取出的單詞長度會產生溢位

if word[p:i]

in s:

#遍歷不同長度的單詞是否存在在集合中

#將下乙個單詞判斷的開始位置放入棧中

if i == l:

#如果取完存在單詞後右側下標恰好為所判斷單詞總長度那麼就代表該單詞是乙個連線詞

flag =

true

#找到乙個連線詞,跳出兩層迴圈,繼續判斷下乙個詞

break

if flag:

break

return ans

class

solution

(object):

deffindallconcatenatedwordsinadict

(self, words)

:"""

:type words: list[str]

:rtype: list[str]

"""defcheck_word

(word,pre_dict):if

len(word)==0

:#因為是遞迴呼叫,用於結束遞迴,結束的條件是單詞正好是連線詞,然後從單詞長度加一的位置呼叫函式自身時,傳入的字串為none,所以長度為0,僅有這一種情況會使得單詞長度變為0

return

true

cur_dict = pre_dict

for index,c in

enumerate

(word)

: cur_dict = cur_dict.get(c,

none

)#取字母元素,取不到的話預設返回none

if cur_dict is

none

:#沒有與當前所取字母元素對應的字典樹,即匹配失敗

return

false

if cur_dict.get(

"end",0

)==1:

#如果取到的是結束符那麼代表當前存在單詞匹配結束,有可能為連線詞,繼續向後判斷是否為已經存在的單詞

if check_word(word[index+1:

],pre_dict)

:# 遞迴呼叫函式判斷發現單詞的下乙個位置到單詞結束

return

true

return

false

words.sort(key =

lambda x:

len(x)

)#單詞按長度排列 [u'cat', u'dog', u'rat', u'cats', u'dogcatsdog', u'catsdogcats', u'ratcatdogcat', u'hippopotamuses']

ans =

list()

pre_dict =

dict()

#字首字典

for item in words:

#遍歷單詞,此處有講究,從短的開始進行比對,首先建立短單詞的字首樹,用於組成長單詞,不會存在短單詞由長單詞組成的情況。

iflen

(item)==0

:continue

if check_word(item,pre_dict)

:#檢查是否為連線詞

else

: cur_dict = pre_dict

for c in item:

if cur_dict.get(c,

none)is

none

:#檢查是否存在字首樹

cur_dict[c]

=dict()

#建立鍵值並新增新的子字典

cur_dict = cur_dict.get(c)

#轉移跟蹤指標到子字典樹中,用於新增下乙個元素到字典樹中

cur_dict[

"end"]=

1#新增單詞結尾標誌

return ans

LeetCode第 472 題 連線詞 C

472.連線詞 力扣 leetcode 和leetcode第 140 題 單詞拆分 ii c zj csdn部落格相似,但是做法不太一樣。本題我用的是字典樹 dfs class trie trie root new trienode void insert string s p isend true...

python使用libssh2連線linux

1.安裝 1 使用下面命令獲得最新版本的ssh4py安裝包 git clone git 2 解壓ssh4py後使用下面命令進行安裝 cd ssh4py python setup.py build python setup.py install 2.開始使用 1 為了使用libssh2,你必須建立乙個...

Python3 連線資料庫

author runfas description 利用tkinter建立乙個登入資料庫的視窗 time 2018 2 8 weichat srf80556635 15992667848 一 本文介紹python3 連線資料庫的操作 winodw平台下,其他平台暫時沒試過 1.pymysql介紹 p...