これは、最初の小川である416、最初の更新449ピアン原稿
問題を見て、準備
今日導入されLeetCodeのタイトルにアルゴリズムやすいのレベル267の(全体のタイトル番号がある質問1189)。テキストの文字列を考えると、単語を形成するために、テキスト文字を使用"balloon"
可能インスタンス限り。各文字は、ほとんどのテキストに一度使用することができます。これは、形成されることができるインスタンスの最大数を返します。
例えば:
入力:テキスト= "nlaebolko"
出力:1
入力:テキスト= "loonbalxballpoon"
出力:2
入力:テキスト= "leetcode"
出力:0
制約:
- 1 <= text.length <= 10 ^ 4
- テキスト文字列は小文字のみが含まれています。
最初のソリューション
与えられた文字列を施すことを意味し、構成されている文字列を見つけることができる"balloon"
文字の最大数、同様の欠点によって決定キャスク内の水の性質および量を。
直接トラバーステキスト文字列、文字の組a
、b
、l
、n
、o
2リットルおよびOとしてカウント発生回数をカウントした後、必要とされる、の必要性l
とo
、次いで2で割った数と出現5つの文字の数を比較します最低限、表示される文字の唯一の最小数が最終的にどのように多くの組成を決定しますので"balloon"
。
public int maxNumberOfBalloons(String text) {
if (text == "" || text.length() < 7) {
return 0;
}
int A = 0, B = 0, L = 0, O = 0, N = 0;
int len = text.length();
for (int i=0; i<len; i++) {
if (text.charAt(i) == 'a') {
A++;
} else if (text.charAt(i) == 'b') {
B++;
} else if (text.charAt(i) == 'l') {
L++;
} else if (text.charAt(i) == 'n') {
N++;
} else if (text.charAt(i) == 'o') {
O++;
}
}
L /= 2;
O /= 2;
int min = Math.min(A, B);
min = Math.min(min, N);
if (min == 0) {
return 0;
}
if (L !=0 && O != 0) {
min = Math.min(min, L);
min = Math.min(min, O);
return min;
}
return 0;
}
第二の溶液
第一の溶液のために、文字がループ状に決定され、使用して26の長さに置き換えることができるint
配列を、アルファベットの26文字の順序に応じて、配列値を直接こと、及び5の数を返すことができます最小。
public int maxNumberOfBalloons2(String text) {
if (text == "" || text.length() < 7) {
return 0;
}
int A = 0, B = 0, L = 0, O = 0, N = 0;
int len = text.length();
int[] arr = new int[26];
for (int i=0; i<len; i++) {
arr[text.charAt(i)-'a']++;
}
A = arr[0];
B = arr[1];
L = arr[11]/2;
N = arr[13];
O = arr[14]/2;
int min = Math.min(A, B);
min = Math.min(min, N);
min = Math.min(min, L);
min = Math.min(min, O);
return min;
}
第三の溶液
第二の溶液のために、私たちは5のローカル変数は、すべての後に、ラインを取るだけで、最小を比較し、アレイに直接行く、省略することができます。
public int maxNumberOfBalloons3(String text) {
if (text == "" || text.length() < 7) {
return 0;
}
int len = text.length();
int[] arr = new int[26];
for (int i=0; i<len; i++) {
arr[text.charAt(i)-'a']++;
}
int min = Math.min(arr[0], arr[1]); //a b
min = Math.min(min, arr[13]); // n
min = Math.min(min, arr[11]/2); // l
min = Math.min(min, arr[14]/2); // o
return min;
}
概要
テーマ別のアルゴリズムは今更新したLeetCodeの特集記事のアルゴリズム273件の +記事、公衆番号]ダイアログボックスの返信[ データ構造とアルゴリズム ]、[ アルゴリズム ]、[ データ構造を記事のコレクションのシリーズを得るために、キーワードのいずれか]。
それは、あなたが何か良い解決策のアイデア、提案やその他の問題がある場合、あなたは以下のコメントを交換することができ、すべてです親指、メッセージを残し、それが見て、私を支援する上での最大の報酬です!