1170【leetcode】。最小の文字の頻度で文字列を比較します

次のように内容は次のとおりです。

関数を定義してみましょう  f(s) 非空の文字列上  sで最小の文字の頻度を計算し、  sたとえば、  s = "dcce" その後、  f(s) = 2 最小の文字であるため  "c"、その頻度は2です。

ここで、文字列配列所与  queries と  words、整数配列戻り  answer各々は、  answer[i] そのようなその単語の数であるが  f(queries[i]) 、<  f(W)、ここ  W で言葉です  words

 

例1:

入力:クエリ= [ "CBD"]、言葉= [ "zaaaz"] 
出力:[1] 
説明:最初の我々は、Fたクエリ( "CBD")= 1、F( "zaaaz")= 3 SO Fに( "CBD")<F( "zaaaz")。

例2:

入力:クエリ= [ "BBB"、 "CC"]、言葉= [ "A"、 "AA"、 "AAA"、 "AAAA"] 
出力:[1,2] 
説明:最初のクエリだけFに(」 BBB ")<F(" AAAA」)。2番目のクエリF( "AAA")およびf( "AAAA")の両方の両方> F( "CC")です。

 

制約:

  • 1 <= queries.length <= 2000
  • 1 <= words.length <= 2000
  • 1 <= queries[i].length, words[i].length <= 10
  • queries[i][j]、  words[i][j] 英語の小文字です。

問題解決のアイデア:この質問は、最小の文字は、各単語の出現頻度の単語を見つける最初に表示され、リストに保存され、比較的簡単です。次の各ワードクエリ演算周波数の最小の文字を表示され、単語の頻度と比較しました。この方法は、すぐに結果を持っていますバイナリ検索を、比較するために使用することができます。

コードは以下の通りであります:

クラスのソリューション(オブジェクト):
     デフnumSmallerByFrequency(自己、クエリ、ワード):
         "" " タイプのクエリ:リスト[STR] タイプの単語:リスト[STR] 
        :RTYPE:リスト[INT] 
        """ 
        defのCALC(ワード) :
            min_v = ワード[0] 
            DIC = {}
             のための I における単語:
                DIC [I] = dic.setdefault(I、0)+ 1 
                min_v = 分(min_v、I)
             戻りDIC [min_v] 
        words_count = []
         のためのワード単語:
            words_count.append(計算値(ワード))

        words_count.sort()

        RES = []
         インポートを二分
         するために、クエリクエリ:
            カウント = CALC(クエリ)
            INX = bisect.bisect_right(words_count、カウント)
            res.append(LEN( words_count) - INX)
         の戻り RES

 

おすすめ

転載: www.cnblogs.com/seyjs/p/11440748.html