inputString = "";
Actually this is a situation in which a blocking reception of Serial is more appropriate, but if you can create a bit more time between transmission, even by putting a few dummy characters in, you will probably be ok.
21,h$...10,h$...1,h$...3,h$...4,h etc
and then
(---
Serial.write(inChar);
if (inchar != '.') inputString += inChar; // discard the dummy character
if (inChar == '$') {
---) etc
The more leds, the more dummy characters you may need, the higher the baud-rate the more dummy characters. If you can just make the sender wait a little after sending the '$' that works as well of course, just enough time to make sure the show() has been completed and interrupts are enabled again.