Проблема в
while(count[str[i]-'a']--) { ... }
причина в том, что выражение
x--
уменьшает x
и возвращает исходное значение (до уменьшения). Использование условия while, например
while(x--) { ... }
, завершает l oop, когда x
изменяется с 1 на 0, но если вы введете while снова, у вас возникнет проблема, потому что x
добрался до -1 и он не вернется к нулю, уменьшив его.
-1 - это "истинное значение" для теста в течение некоторого времени, поэтому он войдет в l oop и станет -2, затем l oop снова и становитесь -3 и так далее до тех пор, пока не получите переполнение и неопределенное поведение.
Вероятно, l oop должно быть записано как
while(count[str[i]-'a']) {
count[str[i]-'a']--;
....
}
, чтобы вы уменьшали его ТОЛЬКО если не ноль