The basic answer to this question which you can google as well is
Base58Check encoding. There serval reason for the S to be used as you know in the mini private keys there some uppercase, lowercase and Numbers mixture with the total
30 characters. So sometimes what happen people gets confused with the 0 and O for this reason in Base58Check encoding for error free encryption of data eliminates such latter's and numbers.
Simple answer is because its Base58Check so it starts with "S" as for the public keys there some standards.
- Taproot address - P2TR : bc1p
- Bech32 / Segwit: bc1q
- Script address: 3
- Legacy address: 1