How do ShortStrings optimize gas/storage?

I'm still confused of how ShortStrings optimize storage. Aren't strings <31 in length already have their length in the last byte? Making it take only one slot.

After searching the internet, I found that short strings (<31 length) in memory follow this pattern. But in storage, even if short, isn't stored this pattern. The slot in storage stores pointer to a location and then length in the last byte.

Is that correct? Please help me explain this.