編寫(xiě)一個(gè)函數(shù)來(lái)查找字符串?dāng)?shù)組中的最長(zhǎng)公共前綴自娩。
如果不存在公共前綴,返回空字符串""王悍。
示例?1:
輸入: ["flower","flow","flight"]輸出:"fl"
示例?2:
輸入: ["dog","racecar","car"]輸出:""解釋:輸入不存在公共前綴岛心。
說(shuō)明:
所有輸入只包含小寫(xiě)字母a-z。
讀題:給了一個(gè)列表祭隔,由字符串組成偎捎,要求返回最長(zhǎng)公共前綴。
那就先找出最短的一個(gè)字符串序攘,比較前N項(xiàng)茴她,
感覺(jué)是一個(gè)一個(gè)樣例測(cè)試,定義方法程奠。改了兩個(gè)小時(shí)丈牢。
首先是列表為空,返回空字符串瞄沙,
然后是列表中有空字符串的己沛,一定是沒(méi)有公共前綴慌核,返回發(fā)字符串
接下來(lái)是去重后長(zhǎng)度唯一,那么原列表就是只有一個(gè)元素申尼,還有就是所有元素都相同垮卓,返回strs[0]就行
其余的要開(kāi)始我們的判斷,首先定義一個(gè)空列表师幕,遍歷strs粟按,計(jì)算長(zhǎng)度然后添加給列表
這時(shí)列表存儲(chǔ)的是和strs元素相同順序的長(zhǎng)度,其實(shí)用字典更直觀一些霹粥,每個(gè)人都有自己喜歡用的灭将,我就喜歡用列表,for循環(huán)之類(lèi)后控。
然后Min方法找出最小值庙曙,按照其索引找出strs中對(duì)應(yīng)的元素,這時(shí)我們就找到最短元素了浩淘。
開(kāi)始準(zhǔn)備比較捌朴,外層為遍歷最短元素,內(nèi)層為遍歷strs,我們比較的是最短元素的前i位和其他元素前i位是否不同张抄,用的是【:i】,所以i要從1開(kāi)始男旗,一直比較到最后一位,最后一位應(yīng)該是
len(strs[a.index(c)] 為什么要加一呢欣鳖?如a = '123456'? ?a[ : 6]? ? ?a[ : 1000]結(jié)果都是一樣的
但是如果a = '1'? ? 對(duì)于range就是(1,1)察皇,意義不明的寫(xiě)法,所以要加1
然后開(kāi)始比較泽台,如果最短元素的前i位在遍歷時(shí)遇到不同了什荣。那么就表明【:i-1】為最長(zhǎng)公共前綴,讓是如果i為1怀酷,那么就是第一就出現(xiàn)不同稻爬,就沒(méi)有公共前綴,
這里我用的方法是找不同蜕依,那么就還有一種可能桅锄,遍歷到最后一位還是沒(méi)有不同
這說(shuō)明說(shuō)明呢,說(shuō)明最短元素就是最長(zhǎng)公共前綴样眠,在外層循環(huán)定義一個(gè)num=0友瘤,每次對(duì)比一個(gè)元素就加一,一圈后歸零檐束,到最后一層時(shí)num == len(strs)表示strs中所有元素都對(duì)比完了辫秧,i == 最短元素長(zhǎng)度表示對(duì)比完整個(gè)最短元素,到這個(gè)時(shí)候return還沒(méi)用上被丧,最短元素就是在長(zhǎng)公共前綴了盟戏。
一步一個(gè)坎绪妹,太費(fèi)勁了,研究一下別人的
先是判斷存不存在strs柿究,然后排序邮旷,讓s1等于排序后第一位,s2等于排序后最后一位
這個(gè)排序可太妙了蝇摸,依照單詞順序排序婶肩,比較第一位后最后一位公共元素就行,
這個(gè)方法返回一個(gè)可遍歷對(duì)象探入,如
i為下標(biāo)狡孔,x為元素懂诗,對(duì)比s1和s2每一位同下標(biāo)元素蜂嗽,
如果不同,這里用一個(gè)十分取巧的方法殃恒,【:i】!!!!返回前i項(xiàng)植旧,而在比較時(shí)一直比較[ i ],并且
[ : 0]表示空字符串
如果全相同离唐,就返回s1病附。
相當(dāng)服氣,NB
再學(xué)習(xí)一個(gè)
這個(gè)關(guān)鍵就是zip函數(shù)亥鬓,卻且的說(shuō)是zip(*)
zip這個(gè)解釋太長(zhǎng)就不粘貼了完沪,隨便說(shuō)一下,zipj就是壓縮的意思嵌戈,壓縮的內(nèi)容是多個(gè)迭代對(duì)象覆积,返回一個(gè)對(duì)象,節(jié)約內(nèi)存熟呛】淼担可以轉(zhuǎn)化為list,而zip(*)就是解壓庵朝÷鹪看一下示例就知道了
很容易理解,不講了