原問題鏈結
隨便選擇乙個字串作為標準,把它的字首串,與其他所有字串進行判斷,看是否是它們所有人的字首子串。
執行用時 :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...