1.タイトルの説明
さまざまなカエルからのカエルの音(文字列 "croak")の組み合わせを表す文字列croakOfFrogsを提供します。同時に鳴くカエルが複数存在する可能性があるため、croakOfFrogsには複数の「鳴き声」が混在しています。シミュレートされた文字列内のすべてのカエルに必要な異なるカエルの最小数を返します。
注:鳴き声の「鳴き声」を鳴らすには、カエルが「c」、「r」、「o」、「a」、「k」の5文字を順番に出力する必要があります。5つの文字すべてが出力されない場合、音は鳴りません。
文字列croakOfFrogsが有効な "croak"文字の混合ではない場合、-1を返します。
输入:croakOfFrogs = "crcoakroak"
输出:2
解释:最少需要两只青蛙,“呱呱” 声用黑体标注
第一只青蛙 "crcoakroak"
第二只青蛙 "crcoakroak"
方法1:カウント
- 正当な文字列では、各文字の出現回数が等しくなければならないためです。
- 別の文字順序があり、番号が以前の相対順序の文字より大きい場合、この文字列は無効です。
- 文字数が正当である場合、必要なカエルの数は、文字数cとkの違いにのみ依存します。
- たとえば、カエルが再び電話をかけ、別のカエルも電話をかけている場合、この時点で必要なカエルの数は2になります。
public int minNumberOfFrogs(String croakOfFrogs) {
int[] c = new int[5];
char[] s = croakOfFrogs.toCharArray();
int max = 0;
for (char ch : s) {
if (ch == 'c') c[0]++;
if (ch == 'r') c[1]++;
if (ch == 'o') c[2]++;
if (ch == 'a') c[3]++;
if (ch == 'k') c[4]++;
for (int i = c.length-1; i >= 1; i--) {
if (c[i] > c[i-1])
return -1;
}
max = Math.max(max, c[0]-c[4]);
}
return c[0] == c[4] ? max : -1;
}
複雑さの分析
- 時間の複雑さ: 、
- スペースの複雑さ: 、
fwc