Leetcode-最長共通接頭辞(Python 3実装)

1604 ワード

Leetcode-最長共通接頭辞
文字列配列の最長の共通接頭辞を検索する関数を作成します.
共通の接頭辞が存在しない場合は、空の文字列「」を返します.
例1:
入力:[[flower]、[flow]、[flight]出力:[fl]例2:
入力:[「dog」、「racecar」、「car」出力:「」解釈:入力に共通接頭辞は存在しません.
説明:
すべての入力には小文字a-zのみが含まれます.
この問題の切り込み点は,最短文字列に準じて,各文字列を分割し,個々に比較することである.
ここで私は2つの問題を解く構想を提供した.
  • シーケンスはパケットを解き、メタグループを集合(集合内の要素は重複しない)に変換し、集合内の要素の個数が1であるかどうかを判断し、1であれば、リスト内のすべての文字列が同じ位置に同じ文字を持っていることを説明する.
  • class Solution:
        def longestCommonPrefix(self, strs: List[str]) -> str:
            str2=""
            #    ,           ,['ac','re']==>('a','r'),('c','e')
            for n in zip(*strs):
                #     ,     1
                list1=set(n)
                if len(list1)==1:
                    str2+=n[0]
                else:
                    break
            return str2
  • まず文字列リストを小さいから大きい順に並べ替え、最短の文字列を取得してから最短の文字列を分割し、分割後の最短の文字列の各文字を他の文字列の同じ位置の文字と1つずつ比較し、同じであれば定義された空のリストに保持する、最後に定義されたリストの長さが初期入力リストの長さであるか否かを判断し、もしそうであれば、各文字列が同じ位置に同じ文字を有することを示す.
  • def longestCommonPrefix(strs):
        char = ""
        #       
        strs.sort(key=len)
        #        
        if len(strs) == 0 or strs[0]=="":
            return char
        #              
        for i in range(len(strs[0])):
            list1 = []
            # strs         
            for j in range(len(strs)):
                if strs[0][i] == strs[j][i]:
                    list1.append(strs[0][i])
            #         ,                 
            if len(list1) == len(strs):
                char += strs[0][i]
            else:
                break
        return char