2017-01-14 6 views
0

が与えられた回数を取得しようとしています。ランダムな小文字アルファベットの文字列からを作成しました。与えられた文字列で単語を何回作成できるかを数えます。

は、私は、文字列hfgajjvbynajgrtyを持っていると私はayanがそれから形成することができる回数を私の名前知っていただきたいと思いますとします。

私は少ししましたが、その後、私はそれをするロジックを考えることができません。

$result = []; 
$count = 0; 
for($i=0; $i<$stringLength; $i++) { 
    $count = substr_count($string, $string[$i]); 
    $result[$string[$i]] = $count; 
} 
var_dump($result); 

foreach($result as $s => $occurs) { 

} 

答えて

0

それは非常に簡単ではありませんが、それはあまりにも難しいことではありません...

あなたは言葉abcを作りたいし、あなたが文字列aaabbbbcccを与えられていると仮定します。

最初に行うことは、必要な単語(明らかに長さ26の配列)内の文字の出現数を含む配列Aを作成することです。

もう1つは、指定した文字列の文字数(長さ26)を含む別の配列Bを作成することです。この例では

、配列は以下のとおりです。

A: 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
B: 3 4 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

あなたは、次のループを実行します。

int answer = 99999999; 
for(i = 0; i < 26; i++){ 
    if(A[i] != 0){ 
     answer = min(answer, B[i]/A[i]); 
    } 
} 

あなたの答えは、AがBに行うことができる回数の最大数を格納します

この例の場合、回答は3です(これは{3,4,3}の間の最小値です)。明らかに1つはbです。

与えられた文字列がaabbbccccであれば、答えは2であり、これは{2,3,4}の間の最小値です。

+0

ほとんどのケースで動作しますが、すべてではありません。特定のテストケースが失敗しました。なぜ私は分からない。 – Ayan

+0

動作しないケースを教えてください。私は間違いなくあなたが望むものを理解しない限り、それが正しいと確信しています – Daniel

+0

よくその大きなケースは、95638文字で構成されています。 – Ayan

関連する問題