Вам действительно нужно использовать кабинетную проверку, чтобы лучше понять, что делает ваш код ...
+------+------+--------+--------------------+-------+
| i | j | str | store | count |
+------+------+--------+--------------------+-------+
| 0 | 0 | aaabbb | [a, , , , , ] | 0 |
| 0 | 1 | aaabbb | [a, , , , , ] | 0 |
| 0 | 2 | aaabbb | [a, , , , , ] | 0 |
| 0 | 3 | aaabbb | [a, , , , , ] | 0 |
| 0 | 4 | aaabbb | [a, , , , , ] | 0 |
| 0 | 5 | aaabbb | [a, , , , , ] | 0 |
| 1 | 0 | aaabbb | [a, , , , , ] | 1 |
| --- break |
| 2 | 0 | aaabbb | [a, , , , , ] | 2 |
| --- break |
| 3 | 0 | aaabbb | [a, b, , , , ] | 0 |
| 3 | 1 | aaabbb | [a, b, , , , ] | 1 |
| --- break |
| 4 | 0 | aaabbb | [a, b, , b, , ] | 0 |
| 4 | 1 | aaabbb | [a, b, , b, , ] | 1 |
| --- break |
| 5 | 0 | aaabbb | [a, b, , b, b, ] | 0 |
| 5 | 1 | aaabbb | [a, b, , b, b, ] | 1 |
| --- break |
+------+------+--------+--------------------+-------+
Основная проблема - store[i - count] = str.charAt(i);
. Это может быть неочевидно до тех пор, пока вы не поймете, что происходит.
Давайте более внимательно посмотрим, когда все пойдет не так ...
+------+------+--------+--------------------+-------+
| i | j | str | store | count |
+------+------+--------+--------------------+-------+
| --- break |
| 3 | 0 | aaabbb | [a, b, , , , ] | 0 |
| 3 | 1 | aaabbb | [a, b, , , , ] | 1 |
| --- break |
| 4 | 0 | aaabbb | [a, b, , b, , ] | 0 |
| 4 | 1 | aaabbb | [a, b, , b, , ] | 1 |
| --- break |
+------+------+--------+--------------------+-------+
Хорошо, когда i
= 4
и j
- это 0
str.charAt(i)
= b
store[j]
= a
count
= 0
Итак, b
! = a
, поэтому вы используете store[i - count]
, что соответствует store[4 - 0]
и сохраняете str.charAt(i)
(или b
) в этой точке
И оттуда все просто выходит из-под контроля.
Проблема "basi c" в том, что count
не имеет отношения к циклам. В любом случае, я бы тоже поставил под сомнение необходимость двух циклов