python3面試-查詢字串陣列中的最長公共字首
阿新 • • 發佈:2021-06-14
問題
編寫一個函式來查詢字串陣列中的最長公共字首。
空字串“”
輸入: ["flower","flow","flight"]
輸出: "fl"
輸入: ["dog","racecar","car"]輸出: ""
解釋:輸入列表不存在公共字首,返回“”
解決思路
先找出最短的字串,再遍歷判斷該字串每個元素的前面索引位置的元素,跟其他字串是不是一樣,如果不是一樣結束迴圈。
程式碼:
a=["flower","flow","flight"] # a=["dog","racecar","car"] cd,zcd=len(a),len(a[0]) for i in a[1:]: if zcd>len(i): zcd=len(i) # print(zcd) news="" for m in range(zcd): flag=False for i in range(cd-1):#2;取值0,1 if a[i][m]!=a[i+1][m]: flag=True break elif i==cd-2: news += a[i][m] if flag: break print(news)
執行結果
fl
升級版程式碼
寫的過程中頁去掉了很多冗餘,程式碼執行效率也提升了
defget_commonstr(a): if len(a)==0: return "" cd,zcd=len(a),len(a[0]) news=""#公共字串 for i in a[1:]: if zcd>len(i): zcd=len(i) #最短字串長度 news=i #最短字串 for m in range(zcd): flag=False #退出外部迴圈標誌 for i in a:#2;取值0,1 if news[m]!=i[m]: #根據字元位置比較是否相等 news=news[:m] flag=True break if flag: break return news s1=["fliower","fliowe","flight"] s2=["dog","racecar","car"] if __name__=="__main__": print("結果:"+get_commonstr(s1)) print("結果:"+get_commonstr([]))