leetcode 最長公共字首 筆記

2021-09-29 11:54:35 字數 1836 閱讀 1263

原問題鏈結

隨便選擇乙個字串作為標準,把它的字首串,與其他所有字串進行判斷,看是否是它們所有人的字首子串。

執行用時 :44 ms, 在所有 python3 提交中擊敗了85.15% 的使用者

記憶體消耗 :13.8 mb, 在所有 python3 提交中擊敗了5.53%的使用者

def

longestcommonprefix

(self, strs: list[

str])-

>

str:

re =

''if

(strs ==

)or(strs[0]

==''):

return

''if

len(strs)==1

:return strs[0]

for i in strs[0]

: re += i

for j in strs[1:

]:if j.startswith(re)

:continue

else

:return

''.join(re[:-

1])return

''.join(re)

縱向掃瞄:從下標0開始,判斷每乙個字串的下標0,判斷是否全部相同。直到遇到不全部相同的下標。時間效能為o(n*m)

執行用時 :40 ms, 在所有 python3 提交中擊敗了94.17% 的使用者

記憶體消耗 :13.9 mb, 在所有 python3 提交中擊敗了5.53%的使用者

def

longestcommonprefix

(self, strs):if

(strs ==

)or(strs==[''

]):return

'' s1 =

min(strs, key=

len)

for i in

range(0

,len

(s1)):

for j in strs:

if j.startswith(s1[

:i+1])

:continue

else

:return s1[

:i]return s1

一些思路(複製與leetcode下回答)

大概有這五種思路, 一般都會採用第四種, 但是耗時太多

1、所求的最長公共字首子串一定是每個字串的字首子串。所以隨便選擇乙個字串作為標準,把它的字首串,與其他所有字串進行判斷,看是否是它們所有人的字首子串。這裡的時間效能是o(mnm)。

2、列出所有的字串的字首子串,將它們合併後排序,找出其中個數為n且最長的子串。時間效能為o(nm+mnlog(mn))

3、縱向掃瞄:從下標0開始,判斷每乙個字串的下標0,判斷是否全部相同。直到遇到不全部相同的下標。時間效能為o(n*m)。

4、橫向掃瞄:前兩個字串找公共子串,將其結果和第三個字串找公共子串……直到最後乙個串。時間效能為o(n*m)。

5、借助trie字典樹。將這些字串儲存到trie樹中。那麼trie樹的第乙個分叉口之前的單分支樹的就是所求。

s1 =

min(strs, key=

len)

#返回字串陣列中長度最短的字串

1,試了2種方法,速度有提公升,但記憶體消耗未有提高,已經耗時1小時了。下次再研究吧。

2,待學習新的內容

1,記憶體消耗的學習( 2019.11.12)

2,上述思路5的學習(trie字典樹)(初步思路已了解,不做展開寫**2019.11.12)

最長公共字首 LeetCode

編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 示例1 輸入 flower flow flight 輸出 fl 示例1 輸入 dog rececar car 輸出 說明 所有輸入只包含小寫字母 a z。首先找到長度最小的字串 minstring,假設此字串為公共字首,依次...

leetcode 最長公共字首

題目 編寫乙個函式來查詢字串陣列中的最長公共字首,如果不存在公公字首,則返回空字串 示例 輸入 flower flow flight 輸出 fl 輸入 dog racecar car 輸出 思路 第一步 令乙個變數等於其中乙個 的首字母,依次看後面的字串是否也有,若沒有跳出整層迴圈,若有計入陣列中 ...

leetcode 最長公共字首

編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 示例 1 輸入 flower flow flight 輸出 fl 示例 2 輸入 dog racecar car 輸出 解釋 輸入不存在公共字首。var longestcommonprefix function strs s...