```python
def rle_encode(s: str) -> str:
    if not s:
        return ""

    encoded = []
    count = 1

    for i in range(1, len(s)):
        if s[i] == s[i - 1]:
            count += 1
        else:
            encoded.append(f"{s[i - 1]}{count}")
            count = 1

    # Append the last run
    encoded.append(f"{s[-1]}{count}")

    return "".join(encoded)
```