関数を定義してみましょう 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そうF( "CBD")= 1、F( "zaaaz")= 3を有しています( "CBD")<F( "zaaaz")。
クラスソリューション{ 公共 のint [] numSmallerByFrequency(文字列[]クエリ文字列[]語){ int型 QNUM = queries.length。 int型 wNum = words.length。 INT [] qArr = 新しい int型[QNUM]。 INT []ウォー= 新しい int型[wNum]。 以下のために(INT ; I <qArr.length; iが0 = I ++ ){ qArr [I] = getSmallFreq(クエリ[I])。 } のための(INTが I = 0、I <wArr.length; I ++ ){ ウォー[I]= getSmallFreq(単語[I])。 } INT [] RES = 新しい INT [QNUM]。 以下のために(INT ; I <QNUM; iが0 = I ++ ){ int型 TMP = 0 。 用(INT {:ウォーwFreq) 場合(qArr [I] < wFreq){ TMP + = 1 ; } } RES [I] = TMP。 } 戻りRES。 } プライベート int型getSmallFreq(文字列S){ INT [] freqArr = 新しい int型 [26 ]。 用(チャーC:s.toCharArray()){ freqArr [C - ''] + = 1 ; } ため(INT iは= 0; I <freqArr.length; I ++ ){ 場合(freqArr [i]が> 0 ){ 戻りfreqArrを[I]。 } } 戻り 0 。 } }