About
因為前幾天出去旅游了,好幾天沒更文了,今天先做一道簡單題起手嘲恍,開始學習。
最長公共前綴
題目描述
編寫一個函數(shù)來查找字符串數(shù)組中的最長公共前綴雄驹。
如果不存在公共前綴佃牛,返回空字符串 ""。
示例 1:
輸入: ["flower","flow","flight"]
輸出: "fl"
示例 2:
輸入: ["dog","racecar","car"]
輸出: ""
解釋: 輸入不存在公共前綴医舆。
說明:
所有輸入只包含小寫字母 a-z 俘侠。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/longest-common-prefix
解題思路
一般來說我們一看到這種簡單的題就有思路,但是我們會考慮的問題是如何讓算法的效率更高蔬将,先說一種暴力解法——掃描法:從第一個元素到最后一個元素循環(huán)比較對應位置的字符是否相等爷速,如果不相等就返回上一次循環(huán)的字符串。
代碼
class Solution:
def longestCommonPrefix(self, strs):
length = len(strs)
if length == 0: return '' # 處理邊界情況
counter = 0
while True:
try: # 使用try來處理list out of range的異常
for i in range(length):
if strs[0][counter] != strs[i][counter]: # 循環(huán)比較每個對應位置的字符
return strs[0][0:counter] # 不相等就返回上一次循環(huán)的列表切片
counter += 1
except BaseException:
return strs[0][0:counter] # 處理異常
運行結果
思路二
利用sort()
方法會產(chǎn)生比較有意思的作用娃胆,sort()
會從頭開始按照字符串的字符在字母表中的位置進行排序遍希,比如:['b','bc','ba','a','c'].sort()
結果為['a', 'b', 'ba', 'bc', 'c']
,無論列表中的元素是否含有公共前綴里烦,我們只需要比較第一個元素和最后一個元素的對應位置是否相等就可以得出最長公共前綴凿蒜。(我感覺我說不清楚,但能想明白)
代碼
class Solution:
def longestCommonPrefix(self, strs):
if len(strs) == 0: return ''
if len(strs) == 1: return strs[0] # 處理邊界情況
strs.sort() # 將列表進行排序胁黑,排序是按照字符在字母表中的位置排序
comms = ''
for x,y in zip(strs[0],strs[-1]): # 使用zip形成對應位置的元組
if x == y:
comms += x # 如果對應位置字符相等就將該字符拼接到公共前綴中
else:
break
return comms