回答編集履歴
3
コード追加
answer
CHANGED
@@ -53,4 +53,4 @@
|
|
53
53
|
```
|
54
54
|
ですが、このオブジェクトが持っているのは、各文字が与えられた文字列の中で出現する合計の回数です。なので、たとえば、文字`a` に対して `count`オブジェクトから`3` という数字が分かっても、この`3`の意味するところとして、どこかに`a`が3連続しているのかもしれないし、あるいは、文字列の先頭に1個の`a`があり、末尾に2連続の`a` があるのかもしれません。しかし、`"bbbaacadee"`での`a`の出現場所と各回数を見ると、これらのどちらでもありません。このように、`count` には、各文字がどこに(それぞれ各)何回という情報が抜け落ちてしまっています。ですので、この`count` から、目的とするコード化された文字列(入力が`bbbaacadee`ならば、`3b2a1c1a1d2e`)を得るのは難しいです。
|
55
55
|
|
56
|
-
先に正規表現と`replace`を使ったコードを挙げましたが、質問にある`arrayStrings`のように、一文字ずつ読んで処理するforループで目的を達成しようとするなら、`count`のような
|
56
|
+
先に正規表現と`replace`を使ったコードを挙げましたが、(質問にある`arrayStrings`のように、)一文字ずつ読んで処理するforループで目的を達成しようとするなら、`count`のような文字と総出現回数のマップではなく、何らか別のデータ構造なりアルゴリズムを再考する必要があります。
|
2
コード追加
answer
CHANGED
@@ -26,4 +26,31 @@
|
|
26
26
|
"abcdefgh => 1a1b1c1d1e1f1g1h => abcdefgh" true
|
27
27
|
"zzzzz => 5z => zzzzz" true
|
28
28
|
|
29
|
-
???? [サンプル](https://codepen.io/kilesa/pen/bGrzOpz?editors=0012) @codepen
|
29
|
+
???? [サンプル](https://codepen.io/kilesa/pen/bGrzOpz?editors=0012) @codepen
|
30
|
+
|
31
|
+
|
32
|
+
### 追記
|
33
|
+
|
34
|
+
質問にある、作成途中のcountStringのコード
|
35
|
+
```javascript
|
36
|
+
function countString(str) {
|
37
|
+
let arrayStrings = str.split("")
|
38
|
+
let count = {};
|
39
|
+
|
40
|
+
for (let i = 0; i < arrayStrings.length; i++) {
|
41
|
+
let a = arrayStrings[i]
|
42
|
+
|
43
|
+
let elm = arrayStrings[i];
|
44
|
+
count[elm] = (count[elm] || 0) + 1;
|
45
|
+
}
|
46
|
+
return count
|
47
|
+
}
|
48
|
+
```
|
49
|
+
についてですが、ここまでで作られる`count` オブジェクトを使って、意図しているコード化を行うのは難しいです。
|
50
|
+
たとえば、`"bbbaacadee"`という文字列からは、`count` は以下のようなオブジェクトになります。
|
51
|
+
```
|
52
|
+
{ b: 3, a: 3, c: 1, d :1, e :2 }
|
53
|
+
```
|
54
|
+
ですが、このオブジェクトが持っているのは、各文字が与えられた文字列の中で出現する合計の回数です。なので、たとえば、文字`a` に対して `count`オブジェクトから`3` という数字が分かっても、この`3`の意味するところとして、どこかに`a`が3連続しているのかもしれないし、あるいは、文字列の先頭に1個の`a`があり、末尾に2連続の`a` があるのかもしれません。しかし、`"bbbaacadee"`での`a`の出現場所と各回数を見ると、これらのどちらでもありません。このように、`count` には、各文字がどこに(それぞれ各)何回という情報が抜け落ちてしまっています。ですので、この`count` から、目的とするコード化された文字列(入力が`bbbaacadee`ならば、`3b2a1c1a1d2e`)を得るのは難しいです。
|
55
|
+
|
56
|
+
先に正規表現と`replace`を使ったコードを挙げましたが、質問にある`arrayStrings`のように、一文字ずつ読んで処理するforループで目的を達成しようとするなら、`count`のような、文字と総出現回数のマップではなく、何らか別のデータ構造を再考する必要があります。
|
1
テキスト修正
answer
CHANGED
@@ -25,6 +25,5 @@
|
|
25
25
|
"pppppppppbbzza => 9p2b2z1a => pppppppppbbzza" true
|
26
26
|
"abcdefgh => 1a1b1c1d1e1f1g1h => abcdefgh" true
|
27
27
|
"zzzzz => 5z => zzzzz" true
|
28
|
-
"zzzzz" "5z" "zzzzz" true
|
29
28
|
|
30
29
|
???? [サンプル](https://codepen.io/kilesa/pen/bGrzOpz?editors=0012) @codepen
|