編寫乙個函式來查詢字串陣列中的最長公共字首。
如果不存在公共字首,返回空字串 「」。
示例 1:輸入: [「flower」,「flow」,「flight」]
輸出: 「fl」
示例 2:說明:所有輸入只包含小寫字母 a-z 。輸入: [「dog」,「racecar」,「car」]
輸出: 「」
解釋: 輸入不存在公共字首。
@xshura:利用python的max()和min(),在python裡字串是可以比較的,按照ascii值排,舉例abb, aba,abac,最大為abb,最小為aba。所以只需要比較最大最小的公共字首就是整個陣列的公共字首。
def
longestcommonprefix
(self, strs):if
not strs:
return
"" s1 =
min(strs)
s2 =
max(strs)
for i,x in
enumerate
(s1)
:if x != s2[i]
:return s2[
:i]return s1
tips:整個最小串是公共字首的話,第二個if語句是不執行的,也就沒有返回值,所以最後返回s1
2.縱向掃瞄:從下標0開始,判斷每乙個字串的下標0,判斷是否全部相同。直到遇到不全部相同的下標。時間效能為o(n*m)。
if
len(strs)
>=1:
min_len =
len(strs[0]
)for tmp_str in strs:
min_len =
len(tmp_str)if(
len(tmp_str)
< min_len)
else min_len#獲取最短的字串長度
out_str =
""for i in
range
(min_len)
:#開始進行縱向掃瞄
flag =
1for j in
range
(len
(strs)):
if strs[j]
[i]!= strs[0]
[i]:
#第乙個字串作為比較標準
flag =
0break
if flag:
out_str += strs[0]
[i]else
:break
return out_str
return
""
class
solution
:def
longestcommonprefix
(self, strs: list[
str])-
>
str:
if strs ==
:# 字串為空返回''
return
''elif
len(strs)==1
:# 若列表僅有乙個單詞,返回該單詞
return strs[0]
else
: minlen =
len(
min(strs, key=
len)
)# 找到最短的單詞長度
s =''for i in
range(1
, minlen +1)
:# 最多遍歷 minlen 次
# 每次遍歷同時從每個單詞取相同長度的字首加入集合,集合中不會有重複單詞
# 列表中每個單詞的相同長度字首相同,因此集合長度為1
iflen()
==1:# 將s值更新為當前s長度與任意乙個單詞[:i]的部分中較大的那個值
# 為了避免不存在strs[1],此處預設為第乙個
s =max(s, strs[0]
[:i]
)return s
14 最長公共字首
編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 示例 1 輸入 flower flow flight 輸出 fl 示例 2 輸入 dog racecar car 輸出 解釋 輸入不存在公共字首。說明 所有輸入只包含小寫字母a z。思路 兩兩對比,產生最後的公共字串 cla...
14 最長公共字首
分析 編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 輸入 flower flow flight 輸出 fl 輸入 dog racecar car 輸出 解釋 輸入不存在公共字首。當字串陣列為空或者字串陣列中有空串時,不存在公共字首 當字串陣列只有乙個元素時,公共字首就是...
14 最長公共字首
編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 示例 1 輸入 flower flow flight 輸出 fl 思路一 先找到陣列中最短元素,最長公共子串不會超過最短元素 對第乙個元素迭代分割,分割後的子串用於迭代比較是否相同。class solution if str...