回答編集履歴

3

コード追加

2021/11/18 21:09

投稿

退会済みユーザー
test CHANGED
@@ -108,4 +108,4 @@
108
108
 
109
109
 
110
110
 
111
- 先に正規表現と`replace`を使ったコードを挙げましたが、質問にある`arrayStrings`のように、一文字ずつ読んで処理するforループで目的を達成しようとするなら、`count`のような文字と総出現回数のマップではなく、何らか別のデータ構造を再考する必要があります。
111
+ 先に正規表現と`replace`を使ったコードを挙げましたが、質問にある`arrayStrings`のように、一文字ずつ読んで処理するforループで目的を達成しようとするなら、`count`のような文字と総出現回数のマップではなく、何らか別のデータ構造なりアルゴリズムを再考する必要があります。

2

コード追加

2021/11/18 21:09

投稿

退会済みユーザー
test CHANGED
@@ -55,3 +55,57 @@
55
55
 
56
56
 
57
57
  ???? [サンプル](https://codepen.io/kilesa/pen/bGrzOpz?editors=0012) @codepen
58
+
59
+
60
+
61
+
62
+
63
+ ### 追記
64
+
65
+
66
+
67
+ 質問にある、作成途中のcountStringのコード
68
+
69
+ ```javascript
70
+
71
+ function countString(str) {
72
+
73
+ let arrayStrings = str.split("")
74
+
75
+ let count = {};
76
+
77
+
78
+
79
+ for (let i = 0; i < arrayStrings.length; i++) {
80
+
81
+ let a = arrayStrings[i]
82
+
83
+
84
+
85
+ let elm = arrayStrings[i];
86
+
87
+ count[elm] = (count[elm] || 0) + 1;
88
+
89
+ }
90
+
91
+ return count
92
+
93
+ }
94
+
95
+ ```
96
+
97
+ についてですが、ここまでで作られる`count` オブジェクトを使って、意図しているコード化を行うのは難しいです。
98
+
99
+ たとえば、`"bbbaacadee"`という文字列からは、`count` は以下のようなオブジェクトになります。
100
+
101
+ ```
102
+
103
+ { b: 3, a: 3, c: 1, d :1, e :2 }
104
+
105
+ ```
106
+
107
+ ですが、このオブジェクトが持っているのは、各文字が与えられた文字列の中で出現する合計の回数です。なので、たとえば、文字`a` に対して `count`オブジェクトから`3` という数字が分かっても、この`3`の意味するところとして、どこかに`a`が3連続しているのかもしれないし、あるいは、文字列の先頭に1個の`a`があり、末尾に2連続の`a` があるのかもしれません。しかし、`"bbbaacadee"`での`a`の出現場所と各回数を見ると、これらのどちらでもありません。このように、`count` には、各文字がどこに(それぞれ各)何回という情報が抜け落ちてしまっています。ですので、この`count` から、目的とするコード化された文字列(入力が`bbbaacadee`ならば、`3b2a1c1a1d2e`)を得るのは難しいです。
108
+
109
+
110
+
111
+ 先に正規表現と`replace`を使ったコードを挙げましたが、質問にある`arrayStrings`のように、一文字ずつ読んで処理するforループで目的を達成しようとするなら、`count`のような、文字と総出現回数のマップではなく、何らか別のデータ構造を再考する必要があります。

1

テキスト修正

2021/11/18 20:41

投稿

退会済みユーザー
test CHANGED
@@ -52,8 +52,6 @@
52
52
 
53
53
  "zzzzz => 5z => zzzzz" true
54
54
 
55
- "zzzzz" "5z" "zzzzz" true
56
-
57
55
 
58
56
 
59
57
  ???? [サンプル](https://codepen.io/kilesa/pen/bGrzOpz?editors=0012) @codepen