LeetCode問題練習Easy編:Longest Common Prefix問題

共通文字の判定問題ですね。リスト中のワードの前から何文字目までが全ての文字に共通するか判定して出力する問題です。

これぱっとおもいつくのはリストの内包表記など、リストの機能を復習しましょうという問題ですね。

まずリストの内包表記の復習は

[str(i) for i in [1, 2, 3]] # 出力は['1','2','3']
[(i * 2) % 5 for i in [1, 2, 3]] # 出力は[2, 4, 1]

こんな感じ

あとリスト中に同じものがいくつあるか数える方法については

にて復習

>>> mylist = ["A", "B", "A", "A", "C"]
>>> print(mylist.count("A"))
3
>>> print(mylist.count("B"))
1
>>> print(mylist.count("D"))
0
>>>

こんな感じ

そしてリストに含まれる要素(ワード)の長さの最大値もしくは最小値を求める方法は

>>> li = ["あいう","アイウエオ","かき","くけこ"]
>>> max([len(x) for x in li])
5

こんな感じ。

これらを利用して、

一番目の文字が全て同じかどうかを判定するコードは

[strs[x][0] for x in range(len(strs))].count(strs[0][0]) == len(strs)

のようにかけます。

あとは最初の文字から、リスト内のワードのうちの最小文字数まで調べればよいわけだから

i <= min([len(x) for x in strs])-1

こういう表記つかえそうです。

最後にインプットが空のリストの可能性も考えて、自分の解答はこんな感じです。

class Solution:
   def longestCommonPrefix(self, strs: List[str]) -> str:
   
       pre=""
       i=0
       while len(strs) !=0 and i <= min([len(x) for x in strs])-1:
           if [strs[x][i] for x in range(len(strs))].count(strs[0][i]) == len(strs):
               pre += strs[0][i]
               i+=1         
           else:
               break
       return(pre)

この記事が気に入ったらサポートをしてみませんか?