teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2017/05/05 12:54

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -28,4 +28,24 @@
28
28
  }
29
29
  ```
30
30
 
31
- で、この場合はStringクラスのメソッドindexOfを繰り返し使うのが正攻法です。
31
+ で、この場合はStringクラスのメソッドindexOfを繰り返し使うのが正攻法です。
32
+
33
+ ---
34
+
35
+ 並び替えを考慮するのであれば、それぞれの文字の個数さえわかればいいので、
36
+ ```java
37
+ //"dog"に限らずいろいろ適用できるように、探す文字列も引数にとって書いてみる
38
+ static int count(String str, String target) {
39
+ Map<Character, Integer> charCount = new HashMap<>(),
40
+ targetCount = new HashMap<>();
41
+ for (char c : str.toCharArray()) {
42
+ charCount.marge(c, 1, Integer::sum);
43
+ }
44
+ for (char c : target.toCharArray()) {
45
+ targetCount.marge(c, 1, Integer::sum);
46
+ }
47
+ // strの中にtargetに使われている文字をそれぞれ何セット分取り出せるか計算し、その最小値をとる
48
+ return targetCount.entrySet().stream().mapToInt(e -> charCount.getOrDefault(e.getKey(), 0) / e.getValue()).min().getAsInt();
49
+ }
50
+ ```
51
+