748.最短完全語(Python)

1555 ワード

タイトル
難易度:★☆☆☆タイプ:文字列
単語リスト(words)の単語の1つにライセンス(licensePlate)のすべてのアルファベットが含まれている場合は、完全語と呼ばれます.すべての完全語の中で、最も短い単語は最も短い完全語と呼ばれています.
単語はナンバープレートの中のアルファベットに一致する時、大文字と小文字を区別しない.例えば、ナンバープレートの中の「P」は依然として単語の中の「p」アルファベットに一致することができる.
私たちは必ず最短の完全語があることを保証します.複数の単語が最短完全語の一致条件に合致している場合は、単語リストの最も上位の1つを取ります.
ナンバープレートには同じ文字が複数含まれる場合があります.たとえば、ナンバープレート「PP」の場合、単語「pair」は一致しませんが、「supper」は一致します.
注意ナンバープレート(licensePlate)の長さは領域[1,7]にある.ナンバープレート(licensePlate)には、数字、スペース、またはアルファベット(大文字と小文字)が含まれます.単語リスト(words)の長さは区間[10,1000]にある.各単語words[i]は小文字であり、長さは区間[1,15]にある.

例1入力:licensePlate=「1 s 3 PSt」、words=[「step」、「steps」、「stripe」、「stepple」出力:「steps」説明:最短完全語には「s」、「p」、「s」および「t」が含まれるべきである.「step」には「s」が1つしか含まれていないため、条件に合致しません.同時に、マッチング中にナンバープレートの大文字と小文字を無視します.
例2入力:licensePlate="1 s 3 456",words=[「looks」,「pest」,「stew」,「show」出力:「pest」説明:アルファベット「s」を含む最短長の完全語が3つ存在するが,最初に出現した完全語を返す.
に答える
次のコードを使用して実装できます.コードは簡潔で論理的ですが、Pythonのいくつかの内蔵関数について理解する必要があります.プロセスは次のとおりです.
  • ナンバープレート文字列のアルファベット以外の文字を削除し、すべての文字を小文字にし、Counterを使用して処理後のナンバープレート文字列のすべての文字が表示された回数を統計します.
  • 単語リストの各単語を同様に処理し、処理後の統計用語表をナンバープレート統計辞書に減算して逆にし、単語のアルファベットにナンバープレートが含まれていれば結果はTrueとなり、条件を満たす単語をフィルタとしてフィルタし、これらの単語の最小長をとる.
  • from collections import Counter
    class Solution:
        def shortestCompletingWord(self, licensePlate, words):
            plate_counter = Counter(filter(str.isalpha, licensePlate.lower()))
            return min(filter(lambda word: not plate_counter-Counter(word.lower()), words), key=len)
    

    質問やアドバイスがあれば、コメントエリアへようこそ~