1. Basically, what Laurent said, but in a more expansive way:
* Apply default formatting to, say, “$” with 3 digits.
* Adjust font, size, and/or tracking for 2 digits. Then make this a character style named “Wide”.
* The same, for 4 digits. Make this a character style “Narrow”.
In the paragraph style for this text, add 2 GREP styles:
* Apply “Wide” to the text “$ddb”
* Apply “Narrow” to the text “$ddddb”
2. Short of replacing the text 'yes' with an image, as explained in the Adobe forum, no easy way.
You can search for 'yes', case sensitive and 'whole word', and replace it with the character ? — that's that tick mark from Zapf Dingbats. Insert it once in your document, using the Glyphs panel; then copy and paste it into the Replace field. Create a character style with the font Zapf Dingbats, and select that in the Replace With formatting field.
You could try this, and see if it works for you:
* Replace each occurrence of 'yes' with 'yes?'. Remember to select both 'case sensitive' and 'whole word' when replacing.)
* Add two more character styles: 'Checkmark Hide' (set the Horizontal width in Advanced Type to 1%, and the text color to [None]) and 'Checkmark Show' (have it only apply the font Zapf Dingbats).
* Add two more GREP styles to the paragraph style. Apply “Checkmark Hide” to this:
yes(?=?)
so the characters 'yes' followed by a checkmark are hidden.
* Apply 'Checkmark Show' to this
(?<=yes)?
so the correct font is applied to every checkmark which is preceded by the text 'yes'.