編寫一個函數來查找字符串數組中的最長公共前綴。
如果不存在公共前綴,返回空字符串 ""
。
示例 1:
輸入: ["flower","flow","flight"]
輸出: "fl"
示例 2:
輸入: ["dog","racecar","car"]
輸出: ""
解釋: 輸入不存在公共前綴。
思路:
1、題目分析
本題的意思就是統計一個列表種所有單詞公用的最長前綴是什麼。
2、解題分析
- 如果列表長度等於0的話直接返回空字符串
- 如果列表長度不小於0的話用一下兩種方法去做
- zip函數法
- 聲明一個空字符串
- 使用zip函數將列表進行解壓,返回一個二維矩陣,每行都是一個列表,列表包含所有字符串的首字母
- 將這個列表轉換爲集合
- 如果長度等於1,說明有公共前綴
- 如果長度大於1,break退出循環
- 遍歷法
- 先遍歷一遍找到字符串中所有字符串中的最小長度,聲明一個空字符串
- 使用兩層循環去遍歷
- 第一層循環用來控制比較的輪數
- 第二層循環用來比較是不是字母都是一樣的
- 如果第一個字符串的字母和後面的不相等直接返回字符串,如果相等繼續遍歷
- zip函數法
代碼如下:
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
#方法2
if len(strs)==0:
return ''
index = len(strs[0])
for i in range(1,len(strs)):
index = min(index,len(strs[i]))
res=''
for i in range(index):
temp = strs[0][i]
for j in range(1,len(strs)):
if temp!=strs[j][i]:
return res
res+=temp
return res
#方法1
s = ""
for i in zip(*strs):
if len(set(i)) == 1:
s += i[0]
else:
break
return s
總結:zip函數十分魔法,在Python之zip方法有介紹。