次のように内容は次のとおりです。
関数を定義してみましょう
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